我想选择第一个元素,但在输出中忽略它的名称。
这是我从每个输入 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中选择第一个<url>
元素的值.XML(Я感觉幸运)。
如何使用 xpath 执行此操作?
我最终使用 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}'
试试:
//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 的解决方案。