我有以下XML,我正在尝试将related_items部分读入列表,但我的代码没有返回任何结果

本文关键字:列表 我的 结果 任何 返回 代码 XML items related | 更新日期: 2023-09-27 17:57:10

我有以下XML,我正在尝试将related_items部分读入列表,但我的代码没有返回任何结果

<classification xmlns="http://server.com/specs_xml_2_0.xsd">
     <minor_class_code>CONVHD</minor_class_code>
     <minor_class_description>CONVERTIBLE HOOD</minor_class_description>
     <color_code>S</color_code>
     <color_code_description>Stainless Steel</color_code_description>
     <this_item_in_other_colors>
        <product>
           <key>BOSCH:DUH30122UC</key>
           <color_code>W</color_code>
           <color_code_description>White</color_code_description>
        </product>
        <product>
           <key>BOSCH:DUH30162UC</key>
           <color_code>B</color_code>
           <color_code_description>Black</color_code_description>
        </product>
     </this_item_in_other_colors>
     <width_string>30</width_string>
     <related_items>
        <related_item_key>BOSCH:DHZ3002UC</related_item_key>
        <related_item_key>BOSCH:D889872UC</related_item_key>
     </related_items> 

XML 是一个 XmlNode。我正在将其加载到XDocument中,并且有此代码

var xdoc = XDocument.Load(new XmlNodeReader(node));
var query = xdoc.Descendants("related_item_key").Select(x => x.Value).ToList();

但它返回空列表

即使有代码

var query = xdoc.Root.Element("related_items"); 

查询获取值 null。

我错过了什么?

谢谢

我有以下XML,我正在尝试将related_items部分读入列表,但我的代码没有返回任何结果

您的代码没有考虑在根元素处声明的默认命名空间:

xmlns="http://server.com/specs_xml_2_0.xsd"

请注意,不带前缀的后代元素隐继承祖先的默认命名空间。您可以使用 XNamespace + 元素的本地名称来引用非空命名空间中的元素:

XNamespace d = "http://server.com/specs_xml_2_0.xsd";
var query = xdoc.Descendants(d+"related_item_key")
                .Select(x => x.Value)
                .ToList();

我把这个VB放在一起作为测试。 它似乎有效。

Imports <xmlns="http://server.com/specs_xml_2_0.xsd">
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim xe As XElement
        xe = <classification xmlns="http://server.com/specs_xml_2_0.xsd">
                 <minor_class_code>CONVHD</minor_class_code>
                 <minor_class_description>CONVERTIBLE HOOD</minor_class_description>
                 <color_code>S</color_code>
                 <color_code_description>Stainless Steel</color_code_description>
                 <this_item_in_other_colors>
                     <product>
                         <key>BOSCH:DUH30122UC</key>
                         <color_code>W</color_code>
                         <color_code_description>White</color_code_description>
                     </product>
                     <product>
                         <key>BOSCH:DUH30162UC</key>
                         <color_code>B</color_code>
                         <color_code_description>Black</color_code_description>
                     </product>
                 </this_item_in_other_colors>
                 <width_string>30</width_string>
                 <related_items>
                     <related_item_key>BOSCH:DHZ3002UC</related_item_key>
                     <related_item_key>BOSCH:D889872UC</related_item_key>
                 </related_items>
             </classification>
        Dim relatedItemsSection As IEnumerable(Of XElement)
        relatedItemsSection = xe...<related_items>
        Dim relatedItems As IEnumerable(Of XElement)
        relatedItems = relatedItemsSection...<related_item_key>
    End Sub
End Class