如何确定xpath / schematron节点上是否有文本

时间:2015-07-14 20:52:34

标签: xml xpath schematron

我正在寻找一种方法来编写一个xpath / schematron测试来识别特定节点,只要它包含任何类型的非白色空间,直接在节点内的任何地方展开未处理的文本(可能在其中,但不是在儿童元素)。所以,如果我的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>    

它将识别somenode的第一个实例,但不会识别第二个实例。我已经尝试了包含(...),text()和test =&#34; ...&#34;的每个变体。我能想到,但显然我是从错误的方向接近这个。

2 个答案:

答案 0 :(得分:2)

我认为这只是

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

我不认为来自@ har07的答案中的“和*”与你的问题中所述的任何要求相关:你没有说必须至少有一个元素孩子,只有必须有(非空文本。

答案 1 :(得分:0)

您可以尝试以下XPath表达式进行测试:

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

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

我不熟悉,但表达式适用于XPath(在XPath谓词中使用)和XSLT,所以这值得一试。