XMLLint --shell 쿼리의 내용을 작성하는 방법은 무엇입니까?

XMLLint --shell 쿼리의 내용을 작성하는 방법은 무엇입니까?

저는 이것을 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

위의 내용은 제가 하고 있는 일과 거의 같습니다. cd별도로 저장하고 검색을 계속 반복할 필요 없이 검색에서 바로 XML 노드를 파일로 저장할 수 있는 방법이 있습니까 ? 아니면 검색 결과를 유지하거나 하나의 쿼리로 위치 번호를 얻을 수 있는 방법이 있습니까?

답변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>

관련 정보