Xml 无法直接访问Xelement中的元素

Xml 无法直接访问Xelement中的元素,xml,vb.net,xelement,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/> &

我在一个名为
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>
但是,这会连接
元素中元素的所有值。根据我所读的内容,我应该能够通过以下方式获得元素的值:

request.Element("ID")
…但我认为名称空间会产生干扰。 我无法直接查询列表元素中嵌套的四个元素中的任何一个。我读过好几篇文章,尝试过几种变体,但都没有成功。请帮忙:)

将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

必须使用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示例生成的,从未运行过。请为错误道歉。
有关更多信息,请参阅:


您必须使用
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")

您在查询中是否使用了适当的
XNamespace
实例?@MarcinJuraszek在查询中应该在哪里使用名称空间?显示
下隐藏的内容……所有我的名称空间
以及一个不起作用的查询示例。@MarcinJuraszek我已经更新了我的post如果我使用的是Xelement对象,我需要这样做吗?如果您需要XPath(我不确定)如果没有XmlNamespaceManager,您就无法获得名称空间。否则,请更清楚地指定“访问元素”是什么意思.Access/获取元素内的值。谢谢,这是可行的,我尝试了类似的方法,但一定使用了错误的命名空间类。我还发现,后代方法为我的Xelement提供了更深层次的粒度,因此我还可以通过:
Dim value As String=tester.subjections.Where(函数)获取元素的值(e) e.Name.LocalName=“ID”)
@Sanpopo
子体执行深入文档树的遍历,因此它几乎总是检查许多不必要的项目。这就是为什么您应该改用
元素
/
元素
的原因-它会更快。
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")