java - Xpath 编译正则表达式不显示 xml 注释

标签 java regex xml xpath xml-parsing

嘿,我对正则表达式的东西很糟糕,想知道这个//[not(*)]在放入XML XPath编译时到底意味着什么?我唯一能找到的是( https://regex101.com/r/Kjodlj/1 )

Match a single character [not(*)].

not() matches a single character not() (case sensitive)

NodeList nodeList = (NodeList) xPath.compile("//*[not(*)]").evaluate(document, XPathConstants.NODESET);

上面的代码似乎没有给我整个 XML 文件中的任何注释。做这样的事情:

NodeList nodeList = (NodeList) xPath.compile("//*").evaluate(document, XPathConstants.NODESET);

确实显示评论,但也搞乱了页面解析。

是否有一个正则表达式可以同时执行这两种操作,以便它仍然可以正确格式化并且还包含注释?或者也许以另一种比使用正则表达式更容易的形式来执行此操作?

最佳答案

XPath.compile 编译 XPath 表达式,而不是 Regex 表达式。它们完全无关。

XPath 表达式 //*[not(*)] 选择文档中所有没有子元素的元素(即所有叶元素)。它的工作原理是:

  1. // 扩展为 /descendant-or-self::node()/
  2. * 扩展为 child::element()
  3. not(X),其中 X 是节点集,测试节点集是否为空。

所以这个表达式的意思

/descendant-or-self::node()/child::element()[empty(child::element())]

它选择文档中某个元素的子元素(实际上,所有元素都是某个元素的子元素),然后过滤此集合以仅保留那些 child::element() 不返回任何内容,即那些没有子元素的元素。

但首先您需要摆脱这与正则表达式有关的想法。如果您搜索 Regex 教程希望深入了解 XPath,您将会感到非常困惑。

关于java - Xpath 编译正则表达式不显示 xml 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59754266/

相关文章:

java - 我如何才能最好地保护此 javax.crypto 服务器客户端中的 IV 和 key 密码

java - 有效地从 HTTP GET 响应中提取 div 标签中的特定信息

Python 正则表达式 : How to select lines between two patterns

c# linq to xml 列表

android - getString() 使已发布的应用程序崩溃

java - IBM MQ 和 Spring Integration - 安全设置

java - 如何从Java中的URL获取标签后的值

java - 解析文档、搜索字符串并用 Java 替换文档中最快/最有效的方法

java - 如何将正则表达式与后跟日期的单词进行匹配?

C#、XML、添加新节点