-1

无法选择带有标签名称的节点。

小XML:

<author-group id="a001">
<author id="aa001">
  <given-name id="g001">Name</given-name>
  <surname id="s001">Name</surname>
</author>
<author id="aa002">
 <given-name id="g002">Name</given-name>
 <surname id="s002">Name</surname>
</author>
<author id="aa003">
   <given-name id="g003">Name</given-name>
   <surname id="s003">Name</surname>
</author>
</author-group>

代码尝试:

Dim xDom As New Xml.XmlDocument
xDom .LoadXml(XMLStr)
Dim Lst As XmlNodeList = xDom.SelectNodes("//author")
Dim NodeCount as Integer =Lst.Count()

计数为零..

4

3 回答 3

4

xmlns属性定义了所谓的默认名称空间,该名称空间适用于该元素所在的元素下的所有内容。但是,您的 XPath 没有指定任何名称空间,这意味着它只会查找author不在任何名称空间中的元素。因此,您实际上是在寻找错误的元素名称。

使用命名空间的 XPath 查询需要XmlNamespaceManager提供命名空间前缀到命名空间的映射。也可以按以下相同的方式在 XPath 中使用默认名称空间。

xxx在以下代码段中替换默认命名空间 URI ,并在加载xDom文档后执行此操作:

'Create an XmlNamespaceManager for resolving namespaces.
Dim nsmgr as XmlNamespaceManager = new XmlNamespaceManager(xDom.NameTable)
nsmgr.AddNamespace(String.Empty, "xxx")

Dim nodeList as XmlNodeList 
Dim root as XmlElement = xDom.DocumentElement
nodeList = root.SelectNodes("//author", nsmgr)
于 2012-07-04T11:27:28.237 回答
0

试试这个(添加 xml DTD,并使用 XDocument):

Dim x As XDocument = <?xml version="1.0" encoding="utf-8"?>
                             <author-group id="a001">
                                 <author id="aa001">
                                     <given-name id="g001">Name</given-name>
                                     <surname id="s001">Name</surname>
                                 </author>
                                 <author id="aa002">
                                     <given-name id="g002">Name</given-name>
                                     <surname id="s002">Name</surname>
                                 </author>
                                 <author id="aa003">
                                     <given-name id="g003">Name</given-name>
                                     <surname id="s003">Name</surname>
                                 </author>
                             </author-group>

Dim xDom As New XmlDocument
xDom.LoadXml(x.ToString())
Dim Lst As XmlNodeList = xDom.SelectNodes("//author")
Dim Cnt As Integer = Lst.Count()
于 2012-07-04T11:24:08.547 回答
0

我将您的代码复制到一个新项目中并且它工作正常。这是我的测试项目中的代码:

Dim XMLStr As String = "<author-group id=""a001""><author id=""aa001"">  <given-name id=""g001"">Name</given-name>  <surname id=""s001"">Name</surname></author><author id=""aa002""> <given-name id=""g002"">Name</given-name> <surname id=""s002"">Name</surname></author><author id=""aa003"">   <given-name id=""g003"">Name</given-name>   <surname id=""s003"">Name</surname></author></author-group>"
Dim xDom As New Xml.XmlDocument
xDom.LoadXml(XMLStr)
Dim Lst As XmlNodeList = xDom.SelectNodes("//author")
Dim Cnt As Integer = Lst.Count()

因此,您的错误必须在代码中的其他位置。

于 2012-07-04T10:06:47.287 回答