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>
我需要执行 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>