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

Xpath compile Regex not showing xml comments

嘿,我对 Regex 的东西很糟糕,想知道这个 //[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);

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

是否有一个 Regex 既能做到既能正确格式化又能包含注释?或者也许以比使用正则表达式更容易的另一种形式来做到这一点?

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() returns nothing,即没有子元素的。

但首先您需要忘记这与正则表达式有任何关系。如果您搜索 Regex 教程希望获得有关 XPath 的见解,您将会感到非常困惑。