XSLT如何用正则表达式删除文本

时间:2014-02-27 14:32:03

标签: xml xslt

我有一个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>

1 个答案:

答案 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;。