Java 使用xpath获取具有特定属性的顶级节点列表

Java 使用xpath获取具有特定属性的顶级节点列表,java,xml,xpath,Java,Xml,Xpath,请为我提供以下场景的X路径表达式 元素标记名不是常量,它们可能会变化,层次结构也可能会变化,因为在上述情况下,路径属性存在于级别1,可能在级别1下不存在 预期结果:NodeList NodeList={a,z};列表不应包含b或y节点 <root> <a path="a"> <b path="b"></b> </a> <z path="z"> <y path="y"&g

请为我提供以下场景的X路径表达式

元素标记名不是常量,它们可能会变化,层次结构也可能会变化,因为在上述情况下,路径属性存在于级别1,可能在级别1下不存在

预期结果:NodeList NodeList={a,z};列表不应包含b或y节点

<root>
   <a path="a">
        <b path="b"></b>
   </a>
   <z path="z">
        <y path="y"></y>
   </z>
</root>

首先是一个很好的XPath教程

要搜索XML,只需遵循以下语法:

String query = "tag[@param= '" + param.getName() + "']";
            log.debug("Xpath query = {}", query);
            XPathExpression<Element> xpe = XPathFactory.instance().compile(query, Filters.element());
            for (Element urle : xpe.evaluate(packages)) {
                urle.doSmth();
            }
String query=“tag[@param=”+param.getName()+””;
debug(“Xpath查询={}”,查询);
XPathExpression xpe=XPathFactory.instance().compile(查询,Filters.element());
对于(元素urle:xpe.evaluate(包)){
urle.doSmth();
}
如果要在文档中的任何位置选择内容,请使用
/
。 例如,
//x
选择所有名为x

的标记,如下所示:

/root/*[@path]
更新

如果根名称不是常量:

/*/*[@path]

元素名可以是任何不特定于根的东西,但path属性在级别2不存在,在级别3不存在,那么它就不起作用了,如果有任何可能用于此条件的xpath,这将非常有用。非常感谢你。。。我必须先了解这些要求。必须包括第一级上的节点(
b
y
)?你在问题中明确表示不。不清楚你想要实现什么。当标记名可能不同时,如何区分是否选择元素?正如你提到的,也不是按等级划分的。