2014-04-18 24 views
1

替换XML节点值我有一个xml:使用XSL

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

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

<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有你没有显示命名空间。