Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT如何使用regexpr删除文本_Xml_Xslt - Fatal编程技术网

Xml XSLT如何使用regexpr删除文本

Xml XSLT如何使用regexpr删除文本,xml,xslt,Xml,Xslt,我有一个XML技术,比如: <div class="col2"> <p>1. wine</p> <p>2. beer</p> <p>3. food</p> </div> 一,。酒 二,。啤酒 三,。食物 我想将其转化为: <div class="col2"> <ol> <li&g

我有一个XML技术,比如:

    <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>
    
    
    如果为此更换

    <xsl:value-of select="normalize-space(substring-after(., '.'))"/>
    
    <xsl:value-of select="replace(., '\d+\.\s+', '')"/>
    
    
    
    您将删除“.”之前的所有内容,修剪多余的空格并获得所需的结果

    对于您介绍的案例(不带空格、数字或句点的单词),您还可以通过以下方式获得相同的结果:

    <xsl:value-of select="translate(., '01234567890. ', '')"/>
    
    
    
    但如果你的数据不同,这将失败,因为它也会消除你文本中的任何空格(例如:“5.快餐”将变成“快餐”)。它还将消除字符串中任何位置的数字或句点

    它们都在XSLT1.0或XSLT2.0中工作,但它们实际上并没有使用Regexp。XSLT1.0不支持Regexp

    如果要使用regexp(需要XSLT 2.0)执行此操作,请为此替换

    <xsl:value-of select="normalize-space(substring-after(., '.'))"/>
    
    <xsl:value-of select="replace(., '\d+\.\s+', '')"/>
    
    
    

    这意味着“找到一个或多个数字,后跟一个句点,后跟一个或多个空格,然后将其替换为零”。

    两个数字之间的确切数字是什么。那么wine呢?@michael.hor257k:正好是一个且只有一个空格,那么一个简单的
    (即一个点和一个空格)就可以了。“找到一个数字”有比9大的数字…:-)哎呀。再次感谢@michael.hor257k!修好了。