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

I have the following XML and I'm trying to read the related_items section into a list but my code returns no result

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

<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();

但是它returns空列表

连代码

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

查询得到值 null。

我错过了什么?

谢谢

我把这个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

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

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();