如何使用 "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。
相似答案:
我有一个 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。
相似答案: