仅当不相关的元素为值时才打印xml元素

时间:2014-01-11 04:32:27

标签: xml xpath xmllint yandex-api

我有一堆带有搜索结果的Yandex.XML文件。 http://api.yandex.com/xml/doc/dg/concepts/response.xml

我想查找所有此类XML文件的查询(//yandexsearch/request/query),其中第一个网址((//yandexsearch/response/results/grouping/group/doc/url)[1])等于某个值(例如http://www.example.org/)。

使用grep进行类比,我首先使用-l标志列出匹配的文档,然后将此类列表传递给xargs xmllint以提取原始查询,但也许xmllint(或其他OS X工具)有更好的方法(另外,我还没有找到xmllint首先在原始匹配中使用与-l类似的标记。)< / p>

1 个答案:

答案 0 :(得分:1)

搜索yandexsearch元素包含您要查找的网址的response个元素,然后选择查询。

/yandexsearch[
  contains(
    (response/results/grouping/group/doc/url)[1],
    "http://www.example.org"
  )]/request/query

对于该页面上给出的示例XML和搜索字符串http://www.yandex.ru,它将返回以下元素:

<query>yandex</query>

如果您的搜索字符串始终是网址的前缀,则可能需要使用starts-with(...)而不是contains(...)