【问题标题】:MS XML selectNodes method not returning the expected nodesMS XML selectNodes 方法未返回预期的节点
【发布时间】:2012-06-09 08:53:19
【问题描述】:

VB6 中的代码(XML 文件)

我的xml文件如下

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

根节点是书

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

仅选择 1 个节点,其余节点被忽略

我想获取所有名为price的节点。

【问题讨论】:

  • 坦率地说,对于 XML 示例,没有名为 Book 的元素,也没有任何名为 Price 的元素,因为 XML 名称的大小写很重要。在示例中有名为 price 的元素作为名为 book 的根元素的子元素,因此对于 XPath,您需要例如/book/price 应该在您发布的示例中选择两个元素节点。因此,对于给定的 XML 示例,路径 /Book/Price 应该选择一个空节点集,selectNodes("/Book/Price") 应该返回一个长度为 0 的空节点列表。如果您得到不同的结果,那么您正在处理不同的 XML 文档。跨度>
  • @chotai.mit,你有没有尝试过任何建议?
  • @MartinHonnen price 节点也没有正确关闭。

标签: xpath vb6 xml-parsing


【解决方案1】:
Set nodlist = xmlDoc.selectNodes("/Book/Price")

XPath 是区分大小写的——在提供的 XML 文档中没有名为 BookPrice 的节点。因此上述方法调用必须返回一个空的XmlNodeList

你想要:

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

【讨论】:

    【解决方案2】:

    1/ 正如 JP 在 OP 的 cmets 中发现的那样,您的第二个 price 节点未正确关闭。

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

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

    但是,如果第一个 price 节点返回给您,则很可能您的选择器实际上是小写的 /book/price,并且您的问题很可能来自第二个 price 节点,而不是正确关闭。

    3/ 最后,您确定book 真的 是您的XML 的 节点吗?你没有bookstore 的父母吗?

    如果您的选择器具有/book/price 形式(一开始只有一个斜线),它是一个绝对 路径,那么它应该为选定的book 选择所有price 元素,但只有给定的book(只有非常单一的) 根节点(在您的文档中显然没有其他book,因为您不能在一个文档中有多个根,也没有父节点完全)。

    试试这个:

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

    如果您有另一个根,例如bookstorelibrary,并且想要使用绝对路径,请尝试:

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

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

    • //book/price
    • //price

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-07
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多