xPath提取属性值的一部分

时间:2013-09-17 13:47:13

标签: xpath

我有一份如下文件。我可以使用xPath表达式

来访问data-ext
/html/body/ol/li[1]/ol/li[1]/@data-ext 

有什么方法可以获得our_id的值吗?

或者我应该将string(/html/body/ol/li[1]/ol/li[1]/@data-ext)解析为单独的json。

<!DOCTYPE html>
<html>
  <head>
    <title>My Title</title>
  </head>
  <body>
    <h1>Contents</h1>
    <ol>
      <li data-ext='{"our_id":"45578107356868511506172578", "our_number":"1"}'>
        <span>Objective 1</span>
      </li>
    </ol> 
  </body>
</html>

2 个答案:

答案 0 :(得分:1)

单独处理JSON可能是一种更简洁的方法,特别取决于您可用的工具。但是为了仅使用XPath,您可以使用substring-before()substring-after()的组合:

substring-before(substring-after(string(/html/body/ol/li[1]/@data-ext), 'our_id":"'), '", "our_number"')

这些函数根据参数返回字符串的部分内容。单击其名称以获取更多详细信息和参考。

答案 1 :(得分:-1)

不,xpath和json是不同的概念。

如果您尝试使用xpath解析json,则可能会遇到转义序列的问题:{"\"our_id":"12345", "our_id":"45578107356868511506172578",...

这就是为什么只应该使用xpath和json的原因。另一个问题是xpath没有完成,我不确定你是否可以编写一个安全的解析器,但我怀疑即使你这样做也会非常快。