我用来xmllint --shell
检查一个非常大的 XML 文件。我已经编写了一个 XPath 查询,它返回我想要的结果,但为了查看和保存结果,我必须先cd
访问每个节点,然后write filename.xml
.如果我不必每次都进行搜索并选择我想要的结果索引,那么这还不错。例子:
xpath count(/root/entry/subentry[special_id = /root/entry/subentry/special_id])
Object is a Node Set :
Set contains 121 nodes:
cd (/root/entry/subentry[special_id = /root/entry/subentry/special_id])[1]
write node1.xml
cd (/root/entry/subentry[special_id = /root/entry/subentry/special_id])[2]
write node2.xml
cd (/root/entry/subentry[special_id = /root/entry/subentry/special_id])[3]
write node3.xml
...
cd (/root/entry/subentry[special_id = /root/entry/subentry/special_id])[121]
write node121.xml
以上或多或少是我正在做的事情。有没有办法直接从搜索中将 XML 节点保存为文件,而不必cd
单独保存它们并继续重复搜索?或者有没有一种方法可以保留搜索结果,或者在一个查询中获取它们的位置号?
答案1
这似乎不可能,所以我编写了一个 XSLT 来做到这一点。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:template match="/">
<root>
<xsl:for-each select="/root/entry/subentry[special_id = /root/entry/subentry/special_id]">
<xsl:copy-of select="."/>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>