0

我需要在一个巨大的 xml 数据库中通过它的内容找到一些记录。我正在寻找一种工具,它能够返回一个完整的静态 xpath,指向一个在 xml 文件中包含“搜索字符串”的文本节点。

假设我的 xml 文件如下所示:

<root>
  <a id="first">
    <b>Some text</b>
  </a>
  <a id="second">
    <b>The search string inside a longer text</b>
  </a>
</root>

如果我使用下一个 xpath:

//text()[contains(., 'search string')]

它会得到

The search string inside a longer text

这是正确的,但不是我需要的。我想知道是否有一种简单的方法可以获得输出或结果:

/root/a[2]/b/

或者

/root/a[@id='second']/b/

无需使用 xslt 或任何面向 xml 的语言进行编码。

4

2 回答 2

1

考虑到 Jack Fleeting 上面的评论,这个班轮怎么样:

xidel -s file.xml -e "//text()[contring')]/ancestor::*/(name(),count(./preceding-sibling::*)+1)" | sed 's/^/\//;N;s/\n\([0-9]*\)/[\1]/' | tr -d '\n' ; echo

最后一个echo只是用于化妆品:在行首获得下一个shell命令的提示。

于 2019-12-03T21:36:19.313 回答
1

我正在寻找一种工具,它能够返回一个完整的静态 xpath,指向一个在 xml 文件中包含“搜索字符串”的文本节点。

Xidel和-functionpath()可能是您正在寻找的。

xidel -s input.xml -e '//text()[contains(.,"search string")]/replace(path(),"Q\{\}","")'
/root[1]/a[2]/b[1]/text()[1]

另请参阅此 xidelcgi 演示

于 2019-12-06T13:20:08.437 回答