0

我在一个名为的 Xelement 对象中有这个 XML request

    <?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
4

2 回答 2

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")
于 2013-08-21T14:34:24.870 回答
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 示例构建的,从未运行过。请原谅错误。
有关详细信息,请参阅:
使用 XmlNamespaceManager
XmlNode.SelectSingleNode管理命名空间

于 2013-08-20T20:37:24.587 回答