XSLT修改属性值

时间:2016-10-22 09:33:36

标签: xml xslt

假设我们有这个源XML:

renderScene

我需要将CLASS更改为MROClass。我有这个XSL,它不起作用,有人可以告诉我有什么问题吗?转换也可以在http://xsltransform.net/gWEamL8/1

上找到
<?xml version="1.0" encoding="UTF-8"?>
<SyncSupplierPartyMaster xmlns="http://schema.infor.com/InforOAGIS/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schema.infor.com/InforOAGIS/2 http://schema.infor.com/2.10.x/InforOAGIS/BODs/Developer/SyncSupplierPartyMaster.xsd" releaseID="9.2" versionID="2.10.x">
    <DataArea>
        <SupplierPartyMaster>
            <Classification>
                <Codes>
                    <Code listID="CLASS" sequence="1">3</Code>
                    <Code listID="CURRENCY" sequence="2">EUR</Code>
                    <Code listID="KVK" sequence="3">-</Code>
                </Codes>
            </Classification>
        </SupplierPartyMaster>
    </DataArea>
</SyncSupplierPartyMaster>

1 个答案:

答案 0 :(得分:2)

XSLT区分大小写。您的XML属性和listID,但您的XSLT正在寻找ListID(大写L)。尝试将模板更改为:

<xsl:template match="@listID[.='CLASS']">
    <xsl:attribute name="listID">
        <xsl:value-of select="'MROClass'"/>
    </xsl:attribute>
 </xsl:template>

请注意,您确实不需要使用xsl:value-of输出文字,您可以这样做......

<xsl:template match="@listID[.='CLASS']">
    <xsl:attribute name="listID">
       <xsl:text>MROClass</xsl:text>
     </xsl:attribute>
 </xsl:template>

或者就是这样:

<xsl:template match="@listID[.='CLASS']">
   <xsl:attribute name="listID">MROClass</xsl:attribute>
</xsl:template>