XSLT用另一个子节点元素值替换子节点元素值

时间:2015-10-10 17:56:01

标签: xslt

如何使用xslt将子节点元素值移动到另一个子节点值。我需要用来自不同子节点的实际城市值替换虚拟城市。

在下面的例子中,我需要将城市从Address子节点移动到Name子节点。

源XML:

<?xml version="1.0" encoding="UTF-8"?>
<M:Top_Node xmlns:M="urn:com">
<M:First_Node>
    <M:Employee>
        <M:Name>
            <M:Employee_ID>001</M:Employee_ID>
            <M:Name>sam</M:Name>
            <M:City>Dummy_City_CA</M:City>
        </M:Name>
        <M:Address>
            <M:City>Actual_City_CA</M:City>
            <M:State>CA</M:State>
        </M:Address>
    </M:Employee>
    <M:Employee>
        <M:Name>
            <M:Employee_ID>002</M:Employee_ID>
            <M:Name>Van</M:Name>
            <M:City>Dummy_City_NY</M:City>
        </M:Name>
        <M:Address>
            <M:City>Actual_City_NY</M:City>
            <M:State>NY</M:State>
        </M:Address>
    </M:Employee>
</M:First_Node>

预期输出:

<?xml version="1.0" encoding="UTF-8"?>
<M:Top_Node xmlns:M="urn:com">
<M:First_Node>
    <M:Employee>
        <M:Name>
            <M:Employee_ID>001</M:Employee_ID>
            <M:Name>sam</M:Name>
            <M:City>Actual_City_CA</M:City>
        </M:Name>
        <M:Address>
            **<M:City>Actual_City_CA</M:City>**
            <M:State>CA</M:State>
        </M:Address>
    </M:Employee>
    <M:Employee>
        <M:Name>
            <M:Employee_ID>002</M:Employee_ID>
            <M:Name>Van</M:Name>
            **<M:City>Actual_City_NY</M:City>**
        </M:Name>
        <M:Address>
            <M:City>Actual_City_NY</M:City>
            <M:State>NY</M:State>
        </M:Address>
    </M:Employee>
</M:First_Node>

1 个答案:

答案 0 :(得分:1)

为该元素编写模板

<xsl:template match="M:Employee/M:Name/M:City">
  <xsl:copy-of select="../../M:Address/M:City"/>
</xsl:template>

当然加上身份转换模板。