Hai我有像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>
我想要作者的节点列表,所以我使用了以下代码将xml字符串加载到DOM。
Dim xDom As New Xml.XmlDocument
xDom .LoadXml(XMLStr)
Dim Lst As XmlNodeList = xDom.SelectNodes("//author")
Dim Cnt as Integer =Lst.Count()
这里Cnt值为零我不知道为什么它不起作用。我正在使用UTF-8编码的xml文件。
答案 0 :(得分: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)
答案 1 :(得分: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()
因此,您的错误必须在代码中的其他位置。
答案 2 :(得分: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()