XSLT 转换

XSLT Conversion

我需要执行 XML XSLT 转换。我是新手,已经阅读了很多教程,但遇到了一个对我来说有点挑战的教程,希望有人能指出正确的方向。

我有两个元素,例如:

<linum class="topic/linum secondAtt/secondVal">Blah</linum>
<linum class="topic/linum">Blah</linum>

如果 linum class 属性有第二个值,我必须使用该属性的第二个值向该元素添加另一个属性。如果它只有一个,那么我就保持原样。

所以上面两个输出的输出是:

<linum class="topic/linum secondAtt/secondVal" newAttribute="secondVal">Blah</linum>
<linum class="topic/linum">Blah</linum>

我希望我已经解释清楚了,如果没有,希望我的输出很清楚,因为只有第一个元素通过添加具有第二个值的新属性进行了转换。

我很感激得到的任何帮助!

以下内容适用于您的示例,其中 class 属性包含不超过两个 space 分隔值:

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="linum[contains(@class, ' ')]">
    <linum class="{@class}" newAttribute="{substring-after(substring-after(@class, ' '), '/')}">
        <xsl:apply-templates/>
    </linum>
</xsl:template>

</xsl:stylesheet>