3

我想选择第一个元素,但在输出中忽略它的名称。

url在从每个输入 xml 文件中请求第一个元素之后,这就是我得到的:

% xmllint \
 --xpath '(//yandexsearch/response/results/grouping/group/doc/url)[1]' \
 *.response.ya.xml
<url>https://example.com/</url><url>https://example.net/</url><url>https://example.org/</url>

但这是我想要的:

https://example.com/
https://example.net/
https://example.org/

<url>请注意,这个想法是从每个输入 Yandex.XML(ЯFeel Lucky)中选择第一个元素的值。

我如何用 xpath 做到这一点?

4

2 回答 2

4

我最终使用awkto 删除<url>and </url>,并在单独的行上打印每个元素的文本,忽略所有空行:

xmllint \
--xpath '(//yandexsearch/response/results/grouping/group/doc/url)[1]' \
| awk -F'</?url>' '{for(i=2;i<=NF;i++) if ($i != "") print $i}'
于 2014-01-10T21:29:58.950 回答
2

请尝试:

//yandexsearch/response/results/grouping/group/doc[1])/url/text()

XPath 通常只选择节点,您可以在围绕 xpath 提取的代码中进行连接。

话虽如此,如果您可以使用 XPath 2.0,它可以:

string-join(//yandexsearch/response/results/grouping/group/doc[1])/url/text(), ' \n')

此外,这个答案提供了几个基于 XSLT 的解决方案。

于 2014-01-10T20:47:01.057 回答