Xml 用于匹配文档中除特定元素中的文本节点之外的所有文本节点的Xpath

Xml 用于匹配文档中除特定元素中的文本节点之外的所有文本节点的Xpath,xml,xslt,xpath,Xml,Xslt,Xpath,尝试在XSLT中构建模板以匹配特定Xpath情况 在这个示例XML文档中,我希望匹配整个文档中的所有文本,除了: 我想要这个文本 我想要这个文本 我不想在这篇文章上匹配 我想要这个文本 关于这个问题有什么想法吗?我正在尝试为它构建一个模板,以便为这个特定案例转换我的文档 我想到了一些类似的东西,但不起作用: <xsl:template match="text()[not(matches(.,x))]"> 有什么想法吗?当你写作时。它接受文本节点的字符串值,而不是父节点的节点

尝试在XSLT中构建模板以匹配特定Xpath情况

在这个示例XML文档中,我希望匹配整个文档中的所有文本,除了


我想要这个文本
我想要这个文本
我不想在这篇文章上匹配
我想要这个文本
关于这个问题有什么想法吗?我正在尝试为它构建一个模板,以便为这个特定案例转换我的文档

我想到了一些类似的东西,但不起作用:

<xsl:template match="text()[not(matches(.,x))]">


有什么想法吗?

当你写作时。它接受文本节点的字符串值,而不是父节点的节点名。火柴需要一个字符串参数

你可以这样写:

<xsl:template match="text()[not(matches(name(..),'x'))]">

或者更好:

<xsl:template match="text()[not(parent::x)]">

更好——没有任何反向轴:

<xsl:template match="*[not(self::x)]/text()">


Laterade,您可能会对一个更短、更好、更高效的解决方案感兴趣,该解决方案既适用于XSLT 2.0,也适用于XSLT 1.0。@DimitreNovatchev:既不更短(每个22个字符),也不更高效(3个节点匹配而不是2个)@BeniBela,称之为黑白很容易吗?第一个XPath表达式是:1。正在计算
name()
,2。父母的,3。使用
匹配()
!!!这不仅比直接比较效率低,而且也不正确。你的第二个表达式仍然有相反的轴,这会导致先向前,然后向后的单词,这是“有效的”吗?至于简短,您的第二个表达式和我的表达式都占用22字节,但您的第一个表达式的长度是34字节。请理解并记住:我们来这里是为了推广最佳实践,而使用反向轴是不合适的。@DimitreNovatchev:当然,我只谈论第二个表达式,因为第一个表达式只是为了解释为什么Laterade的表达式不起作用。这与效率无关,如果它向前或向后计算,则只计算多少。由于父级被缓存,所以使用父端而非自中间的速度更快。(在一个10000行的文件中使用xsltproc和xidel进行了尝试)@BeniBela,除了简短/高效之外,还有可读性/可理解性。
<xsl:template match="*[not(self::x)]/text()">