Xmllint

如何編寫 XMLLint –shell 查詢的內容?

  • November 18, 2015

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單獨處理它們並繼續重複搜尋?或者有沒有辦法保留搜尋結果,或者在一次查詢中獲取他們的位置編號?

這似乎是不可能的,所以我寫了一個 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>

引用自:https://unix.stackexchange.com/questions/243732