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(*)]
选择文档中没有子元素的所有元素(即所有叶元素)。它的工作方式是:
//
扩展为 /descendant-or-self::node()/
*
扩展为 child::element()
not(X)
,其中X
是一个节点集,测试节点集是否为空。
所以表达式的意思是
/descendant-or-self::node()/child::element()[empty(child::element())]
选择文档中所有作为某物的子元素的元素(实际上,所有元素都是某物的子元素),然后过滤此集合以仅保留 child::element()
returns nothing,即没有子元素的。
但首先您需要忘记这与正则表达式有任何关系。如果您搜索 Regex 教程希望获得有关 XPath 的见解,您将会感到非常困惑。
嘿,我对 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(*)]
选择文档中没有子元素的所有元素(即所有叶元素)。它的工作方式是:
//
扩展为/descendant-or-self::node()/
*
扩展为child::element()
not(X)
,其中X
是一个节点集,测试节点集是否为空。
所以表达式的意思是
/descendant-or-self::node()/child::element()[empty(child::element())]
选择文档中所有作为某物的子元素的元素(实际上,所有元素都是某物的子元素),然后过滤此集合以仅保留 child::element()
returns nothing,即没有子元素的。
但首先您需要忘记这与正则表达式有任何关系。如果您搜索 Regex 教程希望获得有关 XPath 的见解,您将会感到非常困惑。