XSLT 1.0将属性值复制为文本并删除属性

问题描述:

我想复制该属性值并将其作为元素文本移动并删除该元素的属性。注意:它必须匹配元素名称,因为我不想删除其他元素的属性。XSLT 1.0将属性值复制为文本并删除属性

输入:

<a name = "attr" value = "text"/> 

预期

<a name = "attr"> text </a> 

假设这是一个示例XML:

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <a name="attr" value="text" /> 
</root> 

然后这个样式表将导致所需的输出:

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="xml"/> 

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

    <xsl:template match="a"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*[local-name() != 'value']"/> 
      <xsl:value-of select="@value" /> 
     </xsl:copy> 
    </xsl:template> 

</xsl:transform> 

输出:

<?xml version="1.0" encoding="UTF-8"?><root> 
    <a name="attr">text</a> 
</root> 

默认模板只是复制递归。与匹配<a>元素的第二个模板。它首先应用不属于value的属性的模板,然后复制属性value的文本。它必须这样做,因为如果属性值出现在其他属性之前,则开始标记已经结束以启动其文本内容,然后其他属性不能再被复制。

+0

非常感谢。你让我今天一整天都感觉很好.. –