【问题标题】:Returning XPath correct order ( insted of document order)返回 XPath 正确顺序(而不是文档顺序)
【发布时间】:2012-05-11 07:18:06
【问题描述】:

所以我在我的大学被分配“修复”XPath 并让它以正确的顺序返回节点。

我一直在尝试找到一种方法来绕过编写很长的代码并将每个表达式分解为小和平,然后将它们重新组合在一起。

我想到了一些想法,但我需要帮助来实现它们:)

  1. 在 XPath jar 中找到对节点进行排序并删除它的方法 - 问题是我不知道它是否可以看到 XPath jar 代码,并且没有在网上找到它。 - 如果你能指出我的话,那就太好了!

  2. 我发现这个选项看起来应该可以解决问题 http://cafeconleche.org/books/xmljava/chapters/ch16s06.html
    但它需要 XPath 3.0 的 dom 实现 而且我在任何地方都找不到那个 dom - 知道是否有这样的事情吗?

  3. 如果您有任何其他想法,我很想听听!

例如:对于这个xml

 <library> 
 <book name="book1"> 
  hello 
 </book> 
 <book name="book2"> 
  world 
 </book>
 <book name="book3">
  !!! 
 </book>
 </library>

还有这个表达式:/library/book[3]/preceding-sibling::book 我得到了

书1 书2

安装:

书2 书1

我可以使用任何东西,只要我在 java 程序中使用它就可以了

感谢您的所有帮助:)

【问题讨论】:

  • 点了,所有的改变。 :)
  • 什么是正确的顺序?如果你的意思是排序,你能use XSLT吗?
  • 添加了一个例子。我可以使用任何东西,只要我在我不理解的 java 代码中编写它,XSLT 有什么帮助?
  • XSLT 可以生成一个文档,其中的节点按您希望的任何顺序排序。但据我所知,你总是想要相反的顺序?
  • 我需要根据我评估的表达式的顺序,我的输入是一个 xml 文件-我不知道文件的结构,我无法将其更改为 XSLT。

标签: java xpath


【解决方案1】:

在 XPath 1.0 中,没有节点序列,只有节点集。 XPath 1.0 规范没有定义节点集中的节点顺序。许多 API 也没有定义它,但它们总是按文档顺序返回节点集中的节点 - 不是因为 XPath 需要它,而是因为 XSLT 需要它,并且 XSLT 已经为 XPath 引擎的行为设定了期望。

如果您希望节点序列能够控制排序,则必须迁移到 XPath 2.0(或 XQuery 1.0,它是 XPath 2.0 的超集)。在 XPath 2.0 中,以下表达式返回您想要的:

reverse(/library/book[3]/preceding-sibling::book)

【讨论】:

  • 好的,我怎样才能迁移到 XPath 2.0/XQuery 1.0?我在哪里可以找到罐子?已经找过了。这也适用于复杂的表达式吗?还是只知道如何反转节点的顺序? (1,2,3,4,5 变成 5,4,3,2,1)
  • @Drau:一种可能性是获得 Saxon——其唯一的开发者是 Michael Kay。当然,买一本关于 XPath 2.0 的好书并开始学习。
  • 有几种产品为 Java 实现了 XQuery 1.0 或 XPath 2.0,Saxon 就是其中之一。像 Dimitre 一样,我建议您在提出任何详细问题之前先阅读一下规范;它非常强大
  • 很抱歉。如果有人要求帮助修理燃气锅炉,那么在回答问题之前,我会尝试在自己的脑海中确定是否建议他们尝试这项任务。当然,我没有太多事情要做,所以我很可能会弄错。
  • @yedidyak:如果您有问题,请提出一个新问题来解释问题。
猜你喜欢
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2013-03-26
  • 2021-04-12
  • 1970-01-01
相关资源
最近更新 更多