我正在尝试获取一个XSLT,它将小写所有元素名称,并为除了id字段之外的所有元素名称添加前缀。除了id字段没有被复制之外,它都可以正常工作。
这是我的XSLT
<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="*"/>
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
<xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:template match="*">
<xsl:element name="theprefix_{translate(local-name(), $uppercase, $lowercase)}" namespace="{namespace-uri()}">
<xsl:apply-templates select="@*|node()[not(self::unique_id)]"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{translate(local-name(), $uppercase, $lowercase)}" namespace="{namespace-uri()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="comment() | text() | processing-instruction()">
<xsl:copy/>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
您在XSLT示例中使用了prepared statements
,所以我假设您
想要保持这个元素没有任何变化(不是unique_id
)。
添加与id
匹配的模板:
unique_id
并从您的代码中删除<xsl:template match="unique_id">
<xsl:copy-of select="."/>
</xsl:template>
。
添加的模板比匹配“*”的模板更具体,所以在
[not(self::unique_id)]
的情况“获胜”并且只处理任何unique_id
节点。