删除与正则表达式不匹配的 XSLT2 元素

问题描述 投票:0回答:1

为了为文档创建目录,我搜索仅捕获

h[0-9]
节点并删除所有其他未在目录中放置的节点。

因此,在 XSLT2 中,我做了以下几行:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

  <xsl:output method="text"/> 


  <xsl:template match="*[not(matches(name(), '^h[0-9]$'))]"> <!-- This is the relevant line -->
  <!-- I let it empty in order to delet its content -->
  </xsl:template>


</xsl:stylesheet>

我使用

saxon-xslt -o output.txt example.xml maketoc.xslt

编译它

但是,不幸的是,

not(matches())
模板不会影响目标行。而且基本不影响线路。

那么,如何删除所有不匹配

h[0-9]
正则表达式的节点呢?

xml xslt-2.0 regex-negation saxon
1个回答
0
投票

您还没有显示源文档,但最可能的解释是源文档最外层元素的名称与 h[0-9] 不匹配,这意味着该元素将被删除,并且其子元素将被删除不予处理。

也许你应该添加一条规则

<xsl:template match="*[*]"> 
  <xsl:apply-templates select="*"/>
</xsl:template>

确保处理继续到此类元素的子元素。

© www.soinside.com 2019 - 2024. All rights reserved.