想知道是否可以使用 XSLT 實作以下目標:我需要遍歷 XML 樹的子節點,并在欄位 auditid 標記中包含具有相似值的節點。要求是為每個具有相同審計 ID 的“記錄”加入“附件”節點。
示例 InputXML:
<?xml version='1.0' encoding='UTF-8'?>
<Root>
<total_count>53</total_count>
<records>
<auditid>00000001</auditid>
<completationdate>2021-08-04</completationdate>
<organization>testcompany1</organization>
<streetaddress>1 peel street, melbourne</streetaddress>
<suburb>South Melbourne</suburb>
</records>
<records>
<auditid>00000002</auditid>
<completationdate>2021-07-07</completationdate>
<organization>testcompany2</organization>
<streetaddress>1 test road, West Footscray</streetaddress>
<suburb>West Footscray</suburb>
<attachments>
<label>71270-2_A</label>
<url>http://test/53X/00000002/71270-2_A.pdf</url>
</attachments>
</records>
<records>
<auditid>00000002</auditid>
<completationdate>2021-07-07</completationdate>
<organization>testcompany2</organization>
<streetaddress>1 test road, West Footscray</streetaddress>
<suburb>West Footscray</suburb>
<attachments>
<label>71270-2_B</label>
<url>http://test/53X/00000002-2_B.pdf</url>
</attachments>
</records>
<records>
<auditid>00000002</auditid>
<completationdate>2021-07-07</completationdate>
<organization>testcompany2</organization>
<streetaddress>1 test road, West Footscray</streetaddress>
<suburb>West Footscray</suburb>
<attachments>
<label>71270-2_C</label>
<url>http://test/53X/00000002/71270-2_C.pdf</url>
</attachments>
</records>
<records>
<auditid>00000003</auditid>
<completationdate>2021-07-08</completationdate>
<organization>testcompany3</organization>
<streetaddress>1 test road, Hampton Park</streetaddress>
<suburb>Hampton Park</suburb>
<attachments>
<label>60797-25_A</label>
<url>http://test/53V/00000003/60797-25_A.pdf</url>
</attachments>
</records>
<records>
<auditid>00000003</auditid>
<completationdate>2021-07-08</completationdate>
<organization>testcompany3</organization>
<streetaddress>1 test road, Hampton Park</streetaddress>
<suburb>Hampton Park</suburb>
<attachments>
<label>60797-25_B</label>
<url>http://test/53V/00000003/60797-25_B.pdf</url>
</attachments>
</records>
</Root>
我的 XSLT:到目前為止,我已經能夠生成每個具有相同值的 auditid 的計數。但無法弄清楚如何迭代這些。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="dogo" match="Root/records" use="auditid" />
<xsl:template match="/Root">
<root>
<total_count>
<xsl:value-of select="total_count"/>
</total_count>
<xsl:for-each select="records[count(key('dogo', auditid)) = 1]">
<xsl:variable name="count">
<xsl:value-of select="count(key('dogo', auditid))"/>
</xsl:variable>
<records>
<count>
<xsl:value-of select="$count"/>
</count>
<xsl:copy-of select="auditid"/>
<xsl:copy-of select="completationdate"/>
<xsl:copy-of select="organization"/>
<xsl:copy-of select="streetaddress"/>
<xsl:copy-of select="suburb"/>
<xsl:copy-of select="attachments"/>
</records>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
預期輸出:
<?xml version='1.0' encoding='UTF-8'?>
<Root>
<total_count>53</total_count>
<records>
<auditid>00000001</auditid>
<completationdate>2021-07-20</completationdate>
<organization>testcompany1</organization>
<streetaddress>1 peel street, melbourne</streetaddress>
<suburb>South Melbourne</suburb>
</records>
<records>
<auditid>00000002</auditid>
<completationdate>2021-07-07</completationdate>
<organization>testcompany2</organization>
<streetaddress>1 test road, West Footscray</streetaddress>
<suburb>West Footscray</suburb>
<attachments>
<label>71270-2_A</label>
<url>http://test/53X/00000002/71270-2_A.pdf</url>
</attachments>
<attachments>
<label>71270-2_B</label>
<url>http://test/53X/00000002-2_B.pdf</url>
</attachments>
<attachments>
<label>71270-2_C</label>
<url>http://test/53X/00000002/71270-2_C.pdf</url>
</attachments>
</records>
<records>
<auditid>00000003</auditid>
<completationdate>2021-07-08</completationdate>
<organization>testcompany3</organization>
<streetaddress>1 test road, Hampton Park</streetaddress>
<suburb>Hampton Park</suburb>
<attachments>
<label>60797-25_A</label>
<url>http://test/53V/00000003/60797-25_A.pdf</url>
</attachments>
<attachments>
<label>60797-25_B</label>
<url>http://test/53V/00000003/60797-25_B.pdf</url>
</attachments>
</records>
</Root>
uj5u.com熱心網友回復:
如果您能夠使用XSLT 2.0,那么為什么不利用它的分組功能并簡單地執行以下操作:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/Root">
<xsl:copy>
<xsl:copy-of select="total_count"/>
<xsl:for-each-group select="records" group-by="auditid">
<records>
<xsl:copy-of select="* except attachments"/>
<xsl:copy-of select="current-group()/attachments"/>
</records>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/454734.html
