2014-01-11 160 views
0

我有一堆帶有搜索結果的Yandex.XML文件。 http://api.yandex.com/xml/doc/dg/concepts/response.xml僅當無關元素爲值時纔打印xml元素

我想找出其中第一個URL((//yandexsearch/response/results/grouping/group/doc/url)[1])等於某個值(比方說,http://www.example.org/)所有這些XML文件的查詢(//yandexsearch/request/query)。

繪製一個類比grep,我會先用-l標誌列出匹配的文檔,然後通過管道這樣的列表xargs xmllint提取原始查詢,但也許xmllint(或其他OS X工具)具有更好的(另外,我還沒有發現xmllint有一個類似-l的標誌,原來的匹配在第一位)。

回答

1

搜索yandexsearch元素,其中response元素包含您正在查找的URL,然後選擇該查詢。

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

對於網頁和搜索字符串http://www.yandex.ru給出的示例XML,它會返回下列元素:

<query>yandex</query> 

如果你的搜索字符串始終是網址的前綴,可能想要使用starts-with(...)而不是contains(...)

+0

看起來它應該做我在問什麼,但我得到一個「分段錯誤」! – cnst

+0

很難說現在有什麼問題;它可能是破壞軟件(訪問它可能不是內存),甚至是硬件損壞(內存有缺陷)。嘗試使用更新版本的'xmllint',併發布更詳細的錯誤信息(如果有_any_)。你怎麼稱呼'xmllint'? –

+0

好的,所以,當我只提供了一個應該產生結果的文件時,我得到了結果,否則,即使輸入只是單個文件,我也只是出現了段錯誤。我幾乎是用一個不同的字符串「http://www.example.org/」調用xmllint,文件也都很小。 – cnst