我想更新XML文件,并希望为标记分配ID。 在我的XML文件中,有一个名为" ComponentDetails"的标记,因为有多个具有相同名称的标记,所以我想为其分配一个id,以便我可以根据ID选择特定的值。 /> 以下是我的XML示例:
<?xml version="1.0" encoding="UTF-8"?><root>
<PayrunDetails>
<PayrunNumber>000777</PayrunNumber>
<PaidDate>2018-05-15</PaidDate>
</PayrunDetails>
<PayLocation>
<LocationCode>ACT</LocationCode>
<LocationDescription>ACT</LocationDescription>
<CompanyDetails>
<CCode>APPLE</CCode>
<CName>APPLE Limited</CName>
<Payslip>
<StaffNumber>12345</StaffNumber>
<BankDetails>
<BankAccountNo>121212</BankAccountNo>
</BankDetails>
<PayDetails>
<PayType>NORMAL</PayType>
<AmountGross>9999</AmountGross>
<ComponentDetails>
<ComponentType>SALARY</ComponentType>
<Amount>1999</Amount>
<YTDAmount>10616</YTDAmount>
</ComponentDetails>
<ComponentDetails>
<ComponentType>TAXABLE</ComponentType>
<Amount>505</Amount>
<YTDAmount>7703</YTDAmount>
</ComponentDetails>
</PayDetails>
</Payslip>
<Payslip>
<StaffNumber>45555</StaffNumber>
<BankDetails>
<BankAccountNo>131313</BankAccountNo>
</BankDetails>
<PayDetails>
<PayType>NORMAL</PayType>
<AmountGross>9999</AmountGross>
<ComponentDetails>
<ComponentType>SALARY</ComponentType>
<Amount>1999</Amount>
<YTDAmount>10616</YTDAmount>
</ComponentDetails>
<ComponentDetails>
<ComponentType>GROSS</ComponentType>
<Amount>7305</Amount>
<YTDAmount>76703</YTDAmount>
</ComponentDetails>
<ComponentDetails>
<ComponentType>TAXABLE</ComponentType>
<Amount>305</Amount>
<YTDAmount>6703</YTDAmount>
</ComponentDetails>
</PayDetails>
</Payslip>
</CompanyDetails>
</PayLocation>
</root>
从上面的XML文件中,我想选择ComponentDetails标记内存在的Amount,YTDAmount子标签值。 不知何故,我设法为ComponentDetails标签分配一个id,但不幸的是,新创建的XML文件中缺少子标签。 我的XSL文件如下:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ComponentDetails">
<xsl:copy>
<xsl:attribute name="ID">
<xsl:number/>
</xsl:attribute>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
所以请给我一个创建带有标签id的XML文件的解决方案。 我是XSLT的新手,所以请原谅潜在的新手问题。任何指导都将在这里表示赞赏 提前致谢。
我做了以下更改并且有效:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="PayDetails/ComponentDetails">
<xsl:copy>
<xsl:attribute name="ID">
<xsl:number/>
</xsl:attribute>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
你必须摆脱这条线
<xsl:template match="ComponentDetails/node()"/>
因为它删除了ComponentDetails
元素的所有子标记。
此外,如果您想要全局唯一ID
,请将<xsl:number/>
元素更改为
<xsl:number level="any" />