我是XSLT的新手,想知道我是否能得到一些帮助。
我目前有一个XML,它包含以下格式的大量副本:
<item:items>
<item:item action="ingest" id="USAUS868509">
<item:itemID>1157245</item:itemID>
<item:spotType>commercial</item:spotType>
</item:item>
<item:items>
我的任务是替换id属性的值。我需要根据代码的数字部分更改此值。如果该值大于850000,则格式应更改为USA868509。如果该值小于850000,则将id值更改为仅包含数字。 XML中的其余值应保持完全相同。
我目前有以下xslt:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//items/item[@id]">
<xsl:choose>
<xsl:when test="substring(id,5) >= 845986">
<xsl:attribute name="id">
<xsl:value-of select="substring(id,5)"/>
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="id">
<xsl:value-of select="id"/>
</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
我无法识别我想要更改的值,因为XSLT不会对变量进行循环。有没有办法可以改变我的XSLT以获得这种逻辑?
答案 0 :(得分:0)
让我们有以下格式正确的输入示例:
<强> XML 强>
throw er; // Unhandled 'error' event
^
Error: read EIO
at exports._errnoException (util.js:890:11)
at TTY.onread (net.js:550:26)
应用以下样式表:
XSLT 1.0
<items>
<item action="ingest" id="USAUS849999">
<itemID>1157245</itemID>
<spotType>commercial</spotType>
</item>
<item action="ingest" id="USAUS850001">
<itemID>1157246</itemID>
<spotType>commercial</spotType>
</item>
</items>
会产生这样的结果:
<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="@id">
<xsl:variable name="code" select="substring(., 6)" />
<xsl:attribute name="id">
<xsl:if test="$code >= 850000">USA</xsl:if>
<xsl:value-of select="$code" />
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>