我有一个文本,其中有节数。
现在,我想用经文编号将文本分开,并将单个经文的编号作为 ID。
由于我不知道如何从源中获取号码,我只是给了他们连续的号码,但如果可能的话,我希望他们从源头分配他们的实际号码。因此,如果缺少一节,XSLT 不会连续计数,而是跳过一个数字。
但除此之外,我还有一个问题,就是一<l n="1"/>
开始我得到了一个空元素。
我认为我的 XSLT<p>
也以某种方式匹配,因此实际的 n="1" 变为 n="2"。
我该如何解决?
我的来源:
<root> <p>1 This is 2 a <hi rend="bold">beautiful</hi> example 3 poem 4 for showing! 5 my problem</p> </root>
转换为:
<xsl:stylesheet version="2.0" exclude-result-prefixes="xs"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="@* |node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="root/p">
<p>
<xsl:variable name="words" select="tokenize(text(),'(1|2|3|4|5|6|7|8|9|0)')" as="xs:string*"/>
<xsl:for-each select="1 to xs:integer(floor(count($words) div 1))">
<xsl:variable name="vIndex" select="(.)" as="xs:integer"/>
<l><xsl:attribute name="n"
select="position()"/>
<xsl:value-of select="$words[$vIndex]"/>
</l>
</xsl:for-each>
</p>
</xsl:template>
</xsl:stylesheet>
我得到的是:
<root>
<p>
<l n="1"/>
<l n="2"> This is </l>
<l n="3"> a beautiful example </l>
<l n="4"> poem </l>
<l n="5"> for showing </l>
<l n="6"> my problem</l>
</p>
</root>
想要的输出是:
<root>
<p>
<l n="1"> This is </l>
<l n="2"> a <hi rend="bold">beautiful</hi> example </l>
<l n="3"> poem </l>
<l n="4"> for showing! </l>
<l n="5"> my problem</l>
</p>
</root>
编辑:我在示例中添加了一个元素。