我有以下 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();
我有以下 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();