如何判断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 *"
给定上下文元素,以上表达式测试当前上下文元素是否具有 非空文本节点子节点 以及 子元素。
我不熟悉 schematron,但该表达式适用于 XPath(f.e 在 XPath 谓词中使用)和 XSLT,因此值得一试。
我觉得简直了
node[text()[normalize-space()]]
我认为@har07 的回答中的 "and *" 与您问题中陈述的任何要求无关:您没有说必须至少有一个子元素,只是说有为(非空)文本。
我正在寻找一种方法来编写 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 *"
给定上下文元素,以上表达式测试当前上下文元素是否具有 非空文本节点子节点 以及 子元素。
我不熟悉 schematron,但该表达式适用于 XPath(f.e 在 XPath 谓词中使用)和 XSLT,因此值得一试。
我觉得简直了
node[text()[normalize-space()]]
我认为@har07 的回答中的 "and *" 与您问题中陈述的任何要求无关:您没有说必须至少有一个子元素,只是说有为(非空)文本。