首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何仅在存在@xml:lang属性的情况下包含它?

如何仅在存在@xml:lang属性的情况下包含它?
EN

Stack Overflow用户
提问于 2016-05-10 12:36:44
回答 2查看 579关注 0票数 1

我正在将TEI转换为XHTML。只有当xml:lang属性存在于当前节点时,我才需要将它转换为lang属性。我尝试了一些笨拙的东西,比如:

代码语言:javascript
运行
复制
<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属性?当然,如果它不存在,就不要使用它。

我在模板中添加了著名的标识规则(此处为据迈克尔·凯说),但它什么也不做:

代码语言:javascript
运行
复制
<!-- 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>

我想我不太明白这条规则。

我想用它来做任何标签,比如:

代码语言:javascript
运行
复制
<p xml:lang="en">
    <seg xml:lang="fr">XYZ</seg> otherwise English.
</p>

预期产出:

代码语言:javascript
运行
复制
<p lang="en">
    <seg lang="fr">XYZ</seg> otherwise English.
</p>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-10 12:45:54

您的标识模板还应该处理子节点,否则它将在第一个匹配节点处停止:

代码语言:javascript
运行
复制
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
</xsl:template>
<xsl:template match="@xml:lang">
    <xsl:attribute name="lang">
        <xsl:value-of select="."/>
    </xsl:attribute> 
</xsl:template>
票数 2
EN

Stack Overflow用户

发布于 2016-05-10 12:44:30

如果您有一个与tei:p匹配的现有模板,那么这将优先于标识模板。您的当前模板执行<xsl:apply-templates />,但这相当于<xsl:apply-templates select="node()" />。它不是处理属性。

您需要做的是用xsl:apply-templates替换当前的xsl:apply-templates,但是选择@xml:lang属性,允许相关的模板匹配它。

代码语言:javascript
运行
复制
<xsl:template match="tei:p">
    <p>
        <xsl:apply-templates select="./@xml:lang"/>
        <xsl:apply-templates/>
    </p>
</xsl:template>

因此,如果@xml:lang不存在,则不会选择任何属性,也不会创建属性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37138772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档