我有一个xml如下,
<session>
<p> This is first sentence</p>
<p> This is second sentance</p>
<session>
我需要的是将名为<s>
的新节点插入<p>
内容中的每个空格。连续空格的数量应显示为<s>
节点的属性。
我已经在xsl之后写了这样做,
<xsl:template match="p/text()" priority="10">
<xsl:analyze-string select="." regex=" ">
<xsl:matching-substring>
<xsl:if test="position() gt 0">
<tps:s c="{position()}"/>
</xsl:if>
<xsl:value-of select="."/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
此代码的结果如下,
<session>
<p><s c="1"/> This<s c="3"/> is<s c="5"/> first<s c="7"/> sentence</p>
<p><s c="1"/> <s c="2"/> <s c="3"/> <s c="4"/> <s c="5"/> <s c="6"/> <s c="7"/> <s c="8"/> <s c="9"/> <s c="10"/> This<s c="12"/> is<s c="14"/> second<s c="16"/> sentance</p>
</session>
如上所示,它为每个空间添加<s>
,但我期待的是,
<session>
<p><s c="1"/>This<s c="1"/> is<s c="1"/> first<s c="1"/> sentence</p>
<p><s c="10"/> This<s c="1"/> is<s c="1"/> second<s c="1"/> sentance</p>
</session>
我尝试使用变量,但由于变量在xslt中没有变化,因此没有成功。任何人都可以建议我一种方法来安排我的代码以获得预期的输出。
感谢adnanced
答案 0 :(得分:1)
我只是匹配一系列空白并计算它们:
<xsl:analyze-string select="." regex=" +">
<xsl:matching-substring>
<tps:s c="{string-length()}"/>
<xsl:text> </xsl:text>
</xsl:matching-substring>
其余代码保持不变。