1

Let's say we have this source XML:

<?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>

I need to change CLASS to MROClass. I have this XSL, which does not work, can someone please advise what is wrong? The transformation can be also found on: http://xsltransform.net/gWEamL8/1

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://schema.infor.com/InforOAGIS/2">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />   

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

<!-- Rename attribute Class to MROClass --> 


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

</xsl:stylesheet>

1 Answer 1

2

XSLT is case-sensitive. Your XML attributes and listID, but your XSLT is looking for ListID (with an upper-case L). Try changing the template to this:

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

Note that you don't really need to output text with xsl:value-of, you could do this...

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

Or even just this:

<xsl:template match="@listID[.='CLASS']">
   <xsl:attribute name="listID">MROClass</xsl:attribute>
</xsl:template>
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.