我是xslt实现的新手,想使用xslt进行xml-to-xml转换。我有以下xml结构,具有多个层次结构,
<GetData xmlns="http://www.hr-xml.org/3" releaseID="3.3">
<Application>
<Sender>
<ID>Person</ID>
</Sender>
<Receiver>
<Component>DataService</Component>
</Receiver>
</Application>
<CreationDateTime>2015-07-10</CreationDateTime>
<DataArea>
<HRData>
<PersonDossier>
<MasterPerson>
<PersonID schemeID="MasterPersonId" schemeAgencyID="Agency">654321</PersonID>
<PersonLegalID schemeID="LegalID" schemeAgencyID="AgencyID">123456789</PersonLegalID>
<PersonName>
<FormattedName formatCode="GivenName, FamilyName">kjddfaad lsfjjo</FormattedName>
<GivenName>kjddfaad<GivenName>
<FamilyName>lsfjjo</FamilyName>
</PersonName>
</MasterPerson>
</MasterPersonDossier>
</HRData>
</DataArea>
</GetData>
问题: 我想掩盖&#34; PersonLegalID&#34;的价值。元素,但整个xml的其余部分必须保留(我只想将123456789转换为***** 6789)。
有人可以为此建议一个xslt吗?我会进一步改进它以满足我的要求。
答案 0 :(得分:1)
我想掩盖&#34; PersonLegalID&#34;的价值。元素,但其余的 必须保留整个xml(我只需要123456789) 转换为***** 6789)。
在这种情况下,除了一些细节之外,您希望按原样复制所有内容,最好以 identity transform 模板作为规则开始,然后添加例外覆盖它。
假设有问题的ID总是9位数,您可以这样做:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns3="http://www.hr-xml.org/3">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ns3:PersonLegalID/text()">
<xsl:value-of select="concat('*****', substring(., 6))"/>
</xsl:template>
</xsl:stylesheet>
请注意使用命名空间前缀来寻址PersonLegalID
节点。