我有这样的XML:
<Temp_Node_A>data</Temp_Node_A>
<Temp_Node_B>data</Temp_Node_B>
...等......
我希望它转换为
<Node_A>data</Node_A>
<Node_B>data</Node_B>
...等......
也就是说,我想搜索Temp_ *并从匹配Temp_ *(或/ Temp _ *)
的每个节点中删除Temp_使用XSLT 1.0,有可能吗?如果是这样,你能举个例子吗?
此致 彼得
答案 0 :(得分:1)
尝试这样的事情:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="*">
<xsl:choose>
<xsl:when test="starts-with(name(), 'Temp_')">
<!-- use substring function -->
<xsl:element name="{substring-after(name(), 'Temp_')}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
我建议你这样做:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[starts-with(name(), 'Temp_')]">
<xsl:element name="{substring-after(name(),'Temp_')}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>