为了为文档创建目录,我搜索仅捕获
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]
正则表达式的节点呢?
您还没有显示源文档,但最可能的解释是源文档最外层元素的名称与 h[0-9] 不匹配,这意味着该元素将被删除,并且其子元素将被删除不予处理。
也许你应该添加一条规则
<xsl:template match="*[*]">
<xsl:apply-templates select="*"/>
</xsl:template>
确保处理继续到此类元素的子元素。