使用xslt屏蔽xml元素

时间:2015-07-10 19:21:28

标签: xml xslt transformation

我是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吗?我会进一步改进它以满足我的要求。

1 个答案:

答案 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节点。