选择一个xml元素,忽略元素名称,打印换行符

时间:2014-01-10 19:44:14

标签: xml xpath xmllint yandex-api

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

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

% 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/

请注意,我们的想法是从每个输入Yandex.XML(Я感觉幸运)中选择第一个<url>元素的值。

如何使用xpath执行此操作?

2 个答案:

答案 0 :(得分:3)

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

xmllint \
--xpath '(//yandexsearch/response/results/grouping/group/doc/url)[1]' \
| awk -F'</?url>' '{for(i=2;i<=NF;i++) if ($i != "") print $i}'

答案 1 :(得分: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')

此外,this answer提供了一些基于XSLT的解决方案。