首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >区分空的textnode和使用空格的textnode

区分空的textnode和使用空格的textnode
EN

Stack Overflow用户
提问于 2020-06-30 18:14:22
回答 1查看 99关注 0票数 0

在验证xml文件时,我想记录任何内容为空的文本节点。换行符\n也被认为是texnode,但这不是我想要证明的。在下面的代码中:'parent‘有两个我不感兴趣的内容'\n’的文本节点。'elem1‘的内容是'\n\n',这是一个错误,必须报告。“elem2”包含有效内容。“book”的内容为空,必须报告。

在我的第一次尝试中,我在每个text-node中搜索\n\t\r并忽略它们。但是这样我也会忽略elem1,它应该被报告为错误。

我做错了什么?(注意:我必须在没有xsd-validation的情况下解决这个问题)

更新1):我已经在元素之间添加了更多\n。现在,第一个'parent‘节点有5个文本节点,其内容为:\n

代码语言:javascript
复制
<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/*")时,我收集这个给定路径的所有节点,并返回一个节点列表。然后,我开始对每个节点及其子节点进行验证。

代码语言:javascript
复制
Nodelist result = xpathinstance.validate(path, currentNode, XPathConstants.NODESET)

for (int n = 0; n < result.getLength(); n++) {

            validateThereAreNoGaps(result.item(n));
        }

在第一个‘parent’元素上,它显示了7个子元素(在更新示例之后)。element-tag之间的每个\n都被视为一个text-node。

作为下一个解决方案,我现在正在尝试将所有\n替换为"“,以摆脱它们...

EN

回答 1

Stack Overflow用户

发布于 2020-06-30 18:56:59

下面是一个简短的表达式,它可能会对你有所帮助:

代码语言:javascript
复制
<(\w+?>)[^\S]*<\/\1

这将选择任何空的文本节点。

如果您不想选择标签,只需使用以下命令:

代码语言:javascript
复制
<(?<=(\w+?>))[^\S]*(?=<\/\1)

然而,第二个不能识别:

代码语言:javascript
复制
<books></books>

例如,但在这种情况下,我建议简单地使用:

代码语言:javascript
复制
><

作为你的表达式来分别找到它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62655140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档