首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xmllint输出的xpath

xmllint输出的xpath
EN

Stack Overflow用户
提问于 2015-11-19 17:49:00
回答 2查看 1.7K关注 0票数 1

我有一些xml文档,我想对这些文档执行xquery操作。通过返回匹配查询的节点,xmllint似乎几乎可以做我想做的事情。这对我没有帮助,因为这个节点可能存在很多地方,而且我不知道匹配的位置。

一个非常简单的例子是xmllint -xpath‘// simple ()=“false”’返回:<shutdown>false</shutdown><shutdown>false</shutdown><shutdown>false</shutdown><shutdown>false</shutdown><shutdown>false</shutdown>

这告诉我有匹配的节点,但没有哪个节点。有什么方法可以获得返回节点的实际xpath吗?我什么也没找到。

虽然给出的示例也可以在编辑器中完成对xml文档的处理,但是对于更复杂的查询来说,这种方法是不可能的。

EN

回答 2

Stack Overflow用户

发布于 2015-11-19 23:22:20

这在普通的XPath 1.0中是不可能的,因为xmllint支持它(在您标记问题时不支持XQuery!)XPath 3.0 (以及XQuery 3.0)将支持@dirkk提出的fn:path($element)。XML1.0只能用于选择整个子树(包括单个元素、文本节点、属性、.),但不能从您的XPath文档中创建新的结果。

您必须使用更强大的语言,如XQuery或任何其他语言来进一步处理ancestor-or-self轴步骤的XPath结果,该步骤包含路径上的所有元素并连接元素名称:

一个XQuery示例:

代码语言:javascript
复制
string-join(
  (
    (: root node :)
    "",
    (: following steps :)
    for $step in //path/to/element/ancestor-or-self::*
    return name($step)
  ),
  "/"
)

对于任意脚本语言,也可以执行类似的操作,我还提出了一个PHP equivalent in another question,另外,即使对特定路径使用位置谓词(这可以很容易地从代码中删除)。

票数 0
EN

Stack Overflow用户

发布于 2015-11-19 23:50:08

含量test.xml:

代码语言:javascript
复制
<l0>
<l1>
    <l1-1>
        <shutdown>true</shutdown>
    </l1-1>
    <l1-2>
        <shutdown>false</shutdown>
    </l1-2>
</l1>
<l2>
    <l2-1>
        <shutdown>false</shutdown>
    </l2-1>
</l2></l0>

Shell脚本:

代码语言:javascript
复制
#!/bin/s

xpath="//shutdown[text()='false']"
count=$(echo "xpath ${xpath}" |xmllint --shell test.xml |grep ELEMENT|wc -l)

x=1
while [ $x -lt `expr $count + 1` ]
do
    parents=`       echo "xpath (${xpath})[${x}]/ancestor::*" | \
                    xmllint --shell test.xml| \
                    grep "ELEMENT" |\
                    sed "s/.*ELEMENT//"|\
                    sed ':a;N;$!ba;s/\n/ -> /g'`
    echo "${parents} -> shutdown(false)[${x}]"
    x=`expr $x + 1`
done

结果:

代码语言:javascript
复制
 l0 ->  l1 ->  l1-2 -> shutdown(false)[1]
 l0 ->  l2 ->  l2-1 -> shutdown(false)[2]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33810920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档