在验证 xml 文件时,我想记录任何内容为空的文本节点。换行符 \n 也被认为是 texnode,但这不是我想要证明的。在下面的代码中:'parent' 有两个我不感兴趣的内容为 '\n' 的文本节点。'elem1'的内容是'\n\n',这是一个错误,必须报告。'elem2' 的内容有效。“书籍”的内容为空,必须报告。
在我的第一次尝试中,我在每个文本节点中搜索 [\n\t\r] 并忽略它们。但是这样我也会忽略应该报告为错误的 elem1 。
我做错了什么?(注意:我必须在没有 xsd-validation 的情况下解决这个问题)
更新 1):我在元素之间添加了更多 \n 。现在第一个“父”节点有 5 个文本节点,内容为:\n
<root>
<parent>
<elem1>
</elem1>
<elem2>good content of el2</elem2>
<elem3> half so good
contentof el3</elem3>
</parent>
<parent>
<elem1>
</elem1>
<elem2>good content</elem2>
<elem3>good</elem3>
<elem4></elem4>
</parent>
<book></book>
</root>
更新 2) 更清晰:如果调用者调用说 validate("//parent/*"),我收集这个给定路径的所有节点并返回一个节点列表。然后我开始验证每个节点及其子节点。
Nodelist result = xpathinstance.validate(path, currentNode, XPathConstants.NODESET)
for (int n = 0; n < result.getLength(); n++) {
validateThereAreNoGaps(result.item(n));
}
Wenn 我到达了第一个“父”元素,它显示了 7 个子元素(在更新示例之后)。元素标签之间的每个 \n 都被视为一个文本节点。
作为下一个解决方案,我现在尝试将所有 \n 替换为 "" 以摆脱它们......