如何判断xpath/schematron节点处是否有文本

How to determine if there is text at a node with xpath/schematron

我正在寻找一种方法来编写 xpath/schematron 测试来识别特定节点,只要它包含任何类型的非白色 space,直接在节点内的任何位置展开的文本(意思可能在子元素中,但不在子元素中)。所以如果我的 xml 看起来像这样:

<root>
...
 <node>
     <arbitraryChild/>
     Find me
     <arbitraryChild>Don't find me</arbitraryChild>
     more text
 </node>
 ...
 <node>
     <arbitraryChild/> <arbitraryChild/>
     <arbitraryChild>Don't find me</arbitraryChild>
 </someNode>
...
</node>    

它会识别某个节点的第一个实例,但不会识别第二个。我已经尝试了我能想到的 contains(...)、text() 和 test="..." 的所有变体,但显然我是从错误的方向来处理这个问题的。

你可以试试下面的XPath表达式来测试:

test="text()[normalize-space()] and *"

给定上下文元素,以上表达式测试当前上下文元素是否具有 非空文本节点子节点 以及 子元素

我不熟悉 ,但该表达式适用于 XPath(f.e 在 XPath 谓词中使用)和 XSLT,因此值得一试。

我觉得简直了

node[text()[normalize-space()]]

我认为@har07 的回答中的 "and *" 与您问题中陈述的任何要求无关:您没有说必须至少有一个子元素,只是说有为(非空)文本。