我有一个XML tekst,如:
<div class="col2">
<p>1. wine</p>
<p>2. beer</p>
<p>3. food</p>
</div>
我想将其转换为:
<div class="col2">
<ol>
<li>wine</li>
<li>beer</li>
<li>food</li>
</ol>
</div>
我怎样才能在xslt中这样做? 具体来说:如何删除数字(使用regexpr)? 我现在有:
<xsl:template match="div[@class='col2']">
<div>
<xsl:copy-of select="@*"/>
<ol>
<xsl:for-each select="p"> <===== what do I do here?
<li>
<xsl:apply-templates/>
</li>
</xsl:for-each>
</ol>
</div>
</xsl:template>
答案 0 :(得分:3)
如果您为此替换<xsl:apply-templates />
:
<xsl:value-of select="normalize-space(substring-after(., '.'))"/>
您将删除之前的所有内容。&#39;,修剪额外的空格并获得您想要的结果。
对于您提供的案例(没有空格,数字或句号的单词),您也可以获得相同的结果:
<xsl:value-of select="translate(., '01234567890. ', '')"/>
但如果您的数据不同,这将失败,因为它还会消除您文本中的任何空格(例如:&#39; 5.快餐&#39;将成为快餐&#39;)。它还将消除字符串中任何位置的数字或句点。
这些都适用于XSLT 1.0或XSLT 2.0,但它们并不真正使用Regexp。 XSLT 1.0不支持Regexp。
如果你想用regexp(需要XSLT 2.0),那么替换<xsl:apply-templates />
:
<xsl:value-of select="replace(., '\d+\.\s+', '')"/>
这意味着&#34;找到一个或多个数字,后跟一个句点,然后是一个或多个空格,并将其替换为空格&#34;。