如何使用 "XDocument.<Vehicles>.<Truck>.<Weight>.Value" 表示法访问命名空间中的 XML 属性?

How can I access an XML property that is in a namespace using "XDocument.<Vehicles>.<Truck>.<Weight>.Value" notation?

我有一个 XML 文档,我只需要从中获取 2 个值。过去,我可以使用 XDocument 轻松完成此操作:

示例XML:

<?xml version="1.0" standalone="yes"?>
<Vehicles>
   <Truck>
     <Color>Blue</Color>
     <Make>General Motors</Make>
     <Weight>3000</Weight>
   </Truck>
</Vehicles>

如果我只想访问 <Truck><Weight>,我可以这样做:

Dim xdoc as XDocument = XDocument.Load("c:/example.xml")
Dim truckWeight as Integer = Integer.Parse(xdoc.<Vehicles>.<Truck>.<Weight>.Value)

...我会很开心。但是,在这种情况下,我的 XML 文档在开头有一个名称空间,如下所示:

<?xml version="1.0" standalone="yes"?>
<Vehicles xmlns="http://interweb.com/Vehicles.xsd">
   <Truck>
      <Color>Blue</Color>
      <Make>General Motors</Make>
      <Weight>3000</Weight>
   </Truck>
</Vehicles>

如果我尝试使用以上行来获取 truckWeight.Value returns Nothing,即使 xdoc 似乎是使用 Visual Studio的文字reader.

我该怎么做才能使用之前提到的 XDocument 符号,同时保持 XML 文件不变?如果这不可能,那么在具有命名空间的 XML 文件中访问类似 <Weight> 的替代方法是什么?

我的解决方案是将命名空间 xmlns 添加到每个元素。 在您的示例中,它看起来像这样:

Dim ns As XNamespace = "http://interweb.com/Vehicles.xsd"
Dim truckWeight As Integer = Integer.Parse(xdoc.Element(ns + "Vehicles").Element(ns + "Truck").Element(ns + "Weight").Value)

执行此代码时,truckWeight 将保存值 3000

我不熟悉这个符号,所以我不知道是否可以将它与命名空间一起使用。

如果您找不到方法,这里是替代方法:

Dim xNS As XNamespace = "http://interweb.com/Vehicles.xsd"
Weight = xDoc.Root.Element(xNS + "Truck").Element(xNS + "Weight").Value

Weight = xDoc.Element(xNS + "Vehicles").Element(xNS + "Truck").Element(xNS + "Weight").Value

每个元素都需要 xNS + "Name",因为文档中有默认命名空间。 xNS+"Name" 将为您隐式转换为 XName。

相似答案: