【发布时间】:2015-07-14 20:52:34
【问题描述】:
我正在寻找一种编写 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 的第一个实例,而不是第二个。我已经尝试了所有我能想到的 contains(...)、text() 和 test="..." 的变体,但显然我是从错误的方向来解决这个问题的。
【问题讨论】:
-
这似乎可以工作
test="normalize-space(text()[1])"我的解析器在我使用 text() 时会抱怨并失败,它会命中一个带有文本的节点,其中的孩子散布在字符串中间(它告诉我“一个序列不允许将多个节点作为第一个参数...")。因此,通过简单地跟踪第一个文本节点,我可以明确地说节点中有文本。不过,这似乎很愚蠢。必须有更好的方法...... -
您能详细说明一下吗? xml中有错误吗?显然,它是一个空节点,但它只是用来传达文本之前可能存在一个元素。甚至可能是一个空的。 [编辑:预期收件人已删除评论,但信息可能仍然相关。]
标签: xml xpath schematron