使用xsl替换xml节点值

时间:2014-04-18 08:23:35

标签: xml xslt

我有一个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>

我写了一个xsl来替换取决于name属性的节点值:

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

并调用上述模板。但是我只得到旧的价值。

1 个答案:

答案 0 :(得分:1)

您不需要命名模板,只需编写两个模板

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

除非XML具有您未显示的名称空间,否则应该这样做。