XPATH只选择第一级孩子

时间:2015-12-10 12:39:47

标签: java xml xpath

我有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参数的节点,而不是主工作流节点和前两个子节点。

我试过这个

3 个答案:

答案 0 :(得分:3)

并不清楚“初级儿童”的含义是什么?&#39;这里,因为servicesoutputinput元素位于同一级别。如果您要返回<{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]";