【问题标题】:Xpath result Placing colon instead of dashXpath 结果放置冒号而不是破折号
【发布时间】:2015-10-16 20:35:28
【问题描述】:

由于某种原因,我尝试使用 XPath 解析以下 XML,它放置冒号而不是破折号,我无法控制源提要并希望获取原始 URL。

这里是xml:

<entry>
   <link href="http://www.iol.co.za/polopoly_fs/iol-news-oct29-sa-justice-read-only-1.1736573!/image/2509245336.jpg_gen/derivatives/box_501/2509245336.jpg" rel="enclosure" type="image/jpg"/>
</entry>

这是 XPath 表达式:

/entry/link[@rel="enclosure"]/@href

结果是

href="http://www.iol.co.za/polopoly_fs/iol:news:oct29:sa:justice:read:only:1.1736573!/image/2509245336.jpg_gen/derivatives/box_501/2509245336.jpg "

我期待的地方:http://www.iol.co.za/polopoly_fs/iol-news-oct29-sa-justice-read-only-1.1736573!/image/2509245336.jpg_gen/derivatives/box_501/2509245336.jpg

查询出于某种原因将所有“-”字符替换为“:”

我做错了什么?

截图来自http://codebeautify.org/Xpath-Tester

【问题讨论】:

  • 很好奇。你是如何运行你的xpath的?什么处理器?什么编程语言?
  • 我实际上在 drupal 中使用它作为提要导入的一部分,但我也使用 codebeautify.org/Xpath-Tester 得到了这个结果
  • 这个 XPath 去掉了“href”string(/entry/link[@rel="enclosure"]/@href)。但是您使用的 xpath 处理器可能有问题,因为此 xpath 的结果将所有冒号“:”替换为破折号“-”(与您的原始问题相反)。使用其他处理器会得到正确的结果(例如freeformatter.com/xpath-tester.html#ad-output
  • 谢谢。我认为xpath测试工具是罪魁祸首,在php中测试/调试之后问题就解决了。

标签: xml xpath xml-parsing


【解决方案1】:

您的 XPath 没问题,但似乎该站点正在做一些奇怪的事情来做输入。

查看http://codebeautify.org/js/viewer/allviewer.js,第 1607 行,其中 XML 输入存储在变量 x 中,所有 : 在计算 XPath 表达式之前都被替换为 -

var x = $("#xmlString").val();
var pattrn = /:/g;
var pattrn1 = /-/g;

x = x.replace(pattrn, '-');
var xml = $.parseXML(x);

稍后在 XPath 结果中执行相反的操作(例如第 1661、1667 行)。

但副作用是,如果您的输入包含- 字符,它们都将转换为:

您可能需要联系网站作者并告知相关信息。

【讨论】:

  • 谢谢,我不会再使用那个网站了。
猜你喜欢
  • 1970-01-01
  • 2012-05-10
  • 2016-04-05
  • 2015-02-11
  • 2012-08-12
  • 1970-01-01
  • 2013-10-23
  • 2012-03-25
相关资源
最近更新 更多