Aquarius24
Aquarius24

Reputation: 1864

Replace xml node value using xsl

I have an xml :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ValidationErrors>
    <FieldName name="contact-detail-name">
        <Errors>
            <error>Please enter NAME</error>
        </Errors>
    </FieldName>
    <FieldName name="contact-detail-street-address">
        <Errors>
            <error>Please enter STREET ADDRESS</error>
        </Errors>
    </FieldName>
    <FieldName name="contact-detail-postcode">
        <Errors>
            <error>Number of digits exceeded. Please try again with 4 digits.</error>
        </Errors>
    </FieldName>
    <FieldName name="contact-detail-email-address">
        <Errors>
            <error>Please enter EMAIL</error>
        </Errors>
    </FieldName>
    <FieldName name="contact-detail-phone-number">
        <Errors>
            <error>Please enter PHONE NUMBER</error>
        </Errors>
    </FieldName>
</ValidationErrors>

I wrote an xsl to replace the node value of depending on the name attribute of :

 <xsl:template name="initialReplace" match="ValidationErrors/FieldName[@name='contact-detail-name']/Errors" >
        <error>Write a name</error>
</xsl:template>

and calling the above template. However i am getting the old value only.

Upvotes: 1

Views: 188

Answers (1)

Martin Honnen
Martin Honnen

Reputation: 167716

You don't need a named template, simply write two templates

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

<xsl:template match="ValidationErrors/FieldName[@name='contact-detail-name']/Errors/error" >
  <error>Write a name</error>
</xsl:template>

That should do, unless the XML has namespaces you haven't shown.

Upvotes: 1

Related Questions