使用xslt掩盖xml元素
问题描述:
我是xslt实现的新手,并想使用xslt进行xml-to-xml转换。我有以下的XML结构,多个层次,使用xslt掩盖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>
问题: 我想掩盖“PersonLegalID”元素,但整个XML的其余部分的价值已经被保存下来(我只想123456789被转换为***** 6789)。
有人可以为此提出一个xslt吗?我会进一步改进以符合我的要求。
答
我想掩盖“PersonLegalID”元素,但其余的 整个XML已经被保存的值(我只想123456789是 转换为***** 6789)。
在这样的,你想要的是除了一些细节的所有内容复制的情况下,这是最好的开始与恒等变换模板的规则,然后添加例外覆盖它。
假设有问题的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
节点。
+0
非常感谢!我会尽力建立你的意见。 – Andy
PersonLegalID中的值是否具有已知的固定长度? - P.S.请提供**格式正确的** XML输入;你的许多元素都没有正确关闭。 –
是的,它是一个9个字符的长度值。 – Andy