我有一个很好的大型xml文档,正在使用xsl进行转换。属性和文本都必须保留不变,除了一种特殊情况,我将其称为“ AZ”。
我想像这样转换字符串AZ:
1.删除第一个逗号之后的所有内容,包括逗号本身。
2.如果末尾有一个数字,请将其删除。
可以将数字包装在<sup></sup>
中,并用</u>
和</p>
取代,并且这些元素之间可以有空格。这些可能会或可能不会被删除,但必须删除数字。
所有输出后来都用Java进行了转换,从而删除了AZ和其他文本的空格和HTML,因此AZ的输出是否具有HTML / spacing无关紧要。
======
我实际上已经解决了问题,但是...太乱了!如果还有更多条款,我可能需要对其进行编辑。
我现在正在使用XSL 1.0。
有什么写方法可以更容易地适应未来的变化吗?更一般,不在乎顺序吗?我能做些比这个怪物更好的事情吗?
<!--code that gets the variable $az goes here-->
<!--substring before comma-->
<xsl:variable name="az2">
<xsl:choose>
<xsl:when test="contains($az, ',')">
<xsl:value-of select="normalize-space(substring-before($az, ','))"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="normalize-space($az)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- p check-->
<xsl:variable name="az3">
<xsl:choose>
<xsl:when test="substring($az2, string-length($az2)-3) = '</p>'">
<xsl:value-of select="normalize-space(substring($az2, 0, string-length($az2)-3))"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$az2"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- u check-->
<xsl:variable name="az4">
<xsl:choose>
<xsl:when test="substring($az3, string-length($az3)-3) = '</u>'">
<xsl:value-of select="normalize-space(substring($az3, 0, string-length($az3)-3))"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$az3"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- sup check-->
<xsl:variable name="az5">
<xsl:choose>
<xsl:when test="substring($az4, string-length($az4)-5, 6) = '</sup>'">
<xsl:value-of select="normalize-space(substring($az4, 0, string-length($az4)-5))"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$az4"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- digit check-->
<xsl:variable name="az6">
<xsl:choose>
<xsl:when test="number(substring($az5, string-length($az5))) = number(substring($az5, string-length($az5)))">
<xsl:value-of select="normalize-space(substring($az5, 0, string-length($az5)))"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$az5"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<el name="header" value="{$az6}"/>
AZ的一些可接受的转换:
herring
-> herring
<p>header 1</p>
-> <p>header
或header
(间距和HTML标记在输出中无关紧要,它们的几乎任何妥协都可以使用)
<p> <u>example</u><u> <sup>1 </sup> </u> , <u>examples <sup>1</sup></u></p>
-> <p> <u>example</u><u> <sup>
或example