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