我有fowoling xml:
<workflow URI="">
<output ID="" URI="#out1"/>
<input ID="sessionToken" URI="#sessionToken"/>
<services>
<sequence>
<service URI="">
<input ID="" URI=""/>
<input URI="" value=""/>
<output ID="" URI=""/>
</service>
</sequence>
</services>
</workflow>
我想只选择工作流节点的第一级子节点,并从此选择中排除服务节点,所以在我的情况下我只想要
<output ID="" URI="#out1"/>
<input ID="sessionToken" URI="#sessionToken"/>
选择了这两个节点,我想在java中使用XPATH。附加要求是所选节点必须具有URI参数。
我试过这个:
XPathExpression expr = xpath.compile("//workflow[@URI='" + oldUrlValue.getNodeValue() + "'] | //workflow//*[not(local-name() = 'services') and @URI]");
但我得到了所有带URI参数的节点,而不是主工作流节点和前两个子节点。
我试过这个
答案 0 :(得分:3)
并不清楚“初级儿童”的含义是什么?&#39;这里,因为services
与output
和input
元素位于同一级别。如果您要返回<{1}}的直接子项没有任何其他子元素,则可以使用以下XPath表达式:
workflow
答案 1 :(得分:1)
只需使用astrik选择器(*
)选择workflow
节点的子节点,然后只选择包含URI
属性([@URI]
)的节点
//workflow[@URI='" + oldUrlValue.getNodeValue() + "']/*[@URI]
答案 2 :(得分:0)
要求:
任何级别工作流程下的第一级,参数URI
String expression = "//workflow/*[@URI]";
或顶部工作流程以下的第一级,参数URI
String expression = "/workflow/*[@URI]";
或者在top和参数URI
的任何标记下面的第一级String expression = "/*/*[@URI]";