【发布时间】:2012-08-01 12:55:42
【问题描述】:
这是 Javascript 中的有效 XPath:
id("priceInfo")/div[@class="standardProdPricingGroup"]/span[1]
这变成了与 DOMXPath 一起使用的有效 PHP XPath->query() 是
//*[@id="priceInfo"]//div[@class="standardProdPricingGroup"]//span[1]
- 您知道任何已经进行此转换的库或自定义组件吗?
- 您知道列出这两种语法差异的可用文档吗?
我主要担心可能存在很多差异,我正在寻找这些差异,但我在识别这些差异时遇到了问题。
这个问题也可以用不同的方式提出:由于 Javascript 可以有不同的有效 XPath 格式,如何规范它们以与 PHP 一起使用。
其中一个更新还提到,如果存在包含此定义的有效 DTD,则 id() 函数是有效的 XPath。我对输入 DTD 没有控制权,如果有办法找到无需任何特定 DTD 即可工作的解决方案,那就太棒了。
更新:
我想用算法将第一种格式转换为第二种格式。我的输入是第一个而不是第二个。无法更改。
正如@Nison Maël 所指出的,第二种格式是有效的 Javascript XPath,如下所示:http://jsbin.com/elatum/2/edit 不幸的是,这只会增加 Javascript XPath“碎片化”的问题。
@salathe 指出,如果记录的输入具有有效的 DTD(@Dimitre Novatchev 在评论中提到这一点,但忽略了重要性),则有效的 Javascript XPath 查询在 PHP 中可以正常工作。不幸的是,我无法控制输入 DTD,所以现在我必须研究一种方法来克服这个问题,或者找到一个即使没有有效 DTD 也能工作的解决方案。
【问题讨论】:
-
这是一个很好的问题!看起来那里没有任何文档(至少不是通过粗略的谷歌搜索)。我很高兴看到这个问题的答案。
-
第一个表达式是合法的 XPath 表达式。但是,要使 Xpath 函数
id()起作用,XML 必须具有 DTD,并且 DTD 中的元素定义必须具有具有ID关键字的属性。 -
@DimitreNovatatchev:那么
//到/的翻译呢? -
@choroba Java 在整个问题中没有被提及一次。此外,
id()是您链接到的规范中提到的 节点集函数。 -
我不认为 javascript 的 xpath 与 php 有很大不同。我的意思是xpath语言应该是一样的,对吧?您能否添加您具体指的是哪个javascript xpath?对于 php,很明显,只有一个。但是等等,不止一个,但你已经写过你指的是标准的 DOMDocument 扩展,对吧。
标签: php javascript xml dom xpath