Xelement内部无法访问元素

时间:2013-08-20 19:03:34

标签: xml vb.net xelement

我在名为request的Xelement对象中包含此XML:

    <?xml version="1.0" encoding="UTF-8"?>
<Message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nc="http://niem.gov/niem/niem-core/2.0">
    <List>
        <nc:Title/>
        <nc:Text/>
        <nc:Value/>
        <nc:ID>1234567890</nc:ID>
    </List>
</Message>

我可以使用:

来获取ID元素的值
request.Elements().Where(Function(e) e.Name.LocalName = "List").Value

但是,这会连接<List>元素内元素的所有值。根据我所读到的,我应该能够通过以下方式获得元素的值:

request.Element("ID")

...但我认为命名空间会干扰。 我无法直接查询嵌套在List元素中的四个元素中的任何一个。我已阅读了几篇文章并尝试了几种变体,但没有运气。请帮助:)

将xml读入xelement并查询返回值为Nothing的ID的示例:

 Dim tester As XElement = XElement.Load("C:\test.xml")
 Dim value As String = tester.Elements.Where(Function(e) e.Name.LocalName = "ID").Value

2 个答案:

答案 0 :(得分:1)

您必须使用XNamespace实例:

Dim doc = XDocument.Load("Input.txt")
Dim nc = XNamespace.Get("http://niem.gov/niem/niem-core/2.0")

Dim value = doc.Root.Element("List").Element(nc + "ID")

答案 1 :(得分:0)

必须使用XmlNamespaceManager。我们假设你的xml在myfile.xml。您的代码中缺少名称空间,因此我使用的是Microsoft。

Dim reader As New XmlTextReader("myfile.xml")
Dim doc As New XmlDocument()
doc.Load(reader)
Dim nsmanager As New XmlNamespaceManager(doc.NameTable)
nsmanager.AddNamespace("nc", "www.microsoft.com/books")
nsmanager.AddNamespace("default", "www.microsoft.com/store")
Dim book as XmlNode 
Dim root as XmlElement = doc.DocumentElement
book = root.SelectSingleNode("//nc:ID", nsmanager)

代码是从MS样本构建的,从未运行过。请为错误道歉 有关更多信息,请参阅:
Manage Namespaces Using the XmlNamespaceManager
XmlNode.SelectSingleNode