使用 xslt 屏蔽 xml 元素 [英] Masking xml element using xslt

查看:36
本文介绍了使用 xslt 屏蔽 xml 元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 xslt 实现的新手,想使用 xslt 进行 xml-to-xml 转换.我有以下具有多个层次结构的 xml 结构,

I am new to xslt implementation and would like to do a xml-to-xml transformation using xslt. I have the following xml structure with multiple levels of hierarchy,

<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).

Question: I would like to mask the value of "PersonLegalID" element but rest of the whole xml has to be preserved(I want just 123456789 to be converted to *****6789).

有人可以为此建议一个xslt吗?我会进一步改进它以满足我的要求.

Can someone please suggest an xslt for this? I will further improve it to meet my requirements.

推荐答案

我想屏蔽PersonLegalID"元素的值,但其余部分必须保留整个 xml(我只想要 123456789转换为 *****6789).

I would like to mask the value of "PersonLegalID" element but rest of the whole xml has to be preserved(I want just 123456789 to be converted to *****6789).

在这种情况下,如果您想复制除少数细节之外的所有内容,最好以身份转换模板作为规则开始,然后添加例外以覆盖它.

In cases like this, where you want to copy everything as is except for a few details, it's best to start with the identity transform template as the rule, then add exceptions to override it.

假设有问题的 ID 总是 9 位数字,你可以这样做:

Assuming the ID in question is always 9 digits long, you could do:

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 节点.

Note the use of a namespace prefix to address the PersonLegalID node.

这篇关于使用 xslt 屏蔽 xml 元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆