MS XML selectNodes方法不返回预期的节点

时间:2012-06-09 08:53:20

标签: xpath vb6 xml-parsing

VB6中的代码(XML文件)

我的Xml文件如下

<book>
    <name>x1</name>
    <price>1<price>
    <name>x2</name>
    <name>x3</name>
    <price>2<price>
</book>

Root Node is Book

Set nodlist = xmlDoc.selectNodes("/Book/Price")

仅选择1个节点,忽略休息

我希望得到名为price的所有节点。

2 个答案:

答案 0 :(得分:2)

Set nodlist = xmlDoc.selectNodes("/Book/Price")

XPath是CAse senSitiVe - 提供的XML文档中没有名为BookPrice的节点。因此,上述方法调用必须返回空的XmlNodeList

你想:

Set nodlist = xmlDoc.selectNodes("/book/price")

答案 1 :(得分:1)

1 / 正如JP在OP的评论中指出的那样,您的第二个price节点未正确关闭。

selectNodes()方法正在使用XPath选择器(syntaxtutorial),对吗?

2 / 正如Dimitre所述,XPath区分大小写,因此如果您的实际元素为/Book/Pricebook,则price无效。它应该是/book/price

但是,如果第一个price节点返回给您,那么您的选择器很可能实际上是低得多的/book/price,并且您问题的概率来自第二个{{1}没有正确关闭的节点。

3 / 最后,您确定price 节点你有没有book父母或其他什么?

如果您的选择器的格式为bookstore(首先只有一个斜杠),那么它是一个绝对路径,那么它应该选择所选的所有/book/price个元素price确实,但只有给定的book (只有非常单一的)根节点(显然没有其他book,因为你不能在一个文档中有几个根,而根本没有父文件。)

试试这个:

  • book应返回文档的所有book/price个节点的所有price个节点
  • book应返回所有price个节点,无论它们是整个文档中的父节点

如果您有其他根,例如pricebookstore,并且想要使用绝对路径,请尝试:

  • library(或/bookstore/book/price,或任何您的实际根节点)

此外,您可以尝试使用类似的东西访问相对到您的节点,具体取决于您在XML树中的位置:

  • /library/book/price
  • //book/price