我正在将TEI XML转换为XHTML。只有当它存在于当前节点时,我需要将xml:lang
属性转换为lang
属性。我尝试了一些笨拙的东西,如:如何只包含@xml:lang属性?
<xsl:template match="tei:p">
<xsl:element name="p">
<xsl:attribute name="lang">
<xsl:value-of select="./@xml:lang"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
...但我想坚持最佳实践。如何简单地使用xml:lang
属性并将其转换为lang
属性?当然,如果它不存在,请不要使用它。
我已经加入了著名的身份规则我的模板(这里according to Michael Kay),但它什么都不做:
<!-- Identity Rule -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="@xml:lang">
<xsl:attribute name="lang">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
我想我不正确理解规则。
我想使用的任何标记,如:
<p xml:lang="en">
<seg xml:lang="fr">XYZ</seg> otherwise English.
</p>
预期输出:
<p lang="en">
<seg lang="fr">XYZ</seg> otherwise English.
</p>
谢谢,实际上,我认为这个解决方案比来自@TimC的解决方案更清洁,但是这个解决方案不起作用。如果我使用进口产品,有什么具体的地方需要注意吗?还是它具有较低的优先级? –
哦,我看到它的作品**与@TimC的答案!这意味着这两个答案是解决方案。 –
命令'@ * | node()'是否重要?或者也有可能'node()| @ *'? –