我想选择第一个元素,但在输出中忽略它的名称。
这是我从每个输入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执行此操作?
答案 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的解决方案。