我有以下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。
我错过了什么?
谢谢
您的代码没有考虑在根元素处声明的默认命名空间:
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