XPATH仅选择第一级子级

sim*_*onC 0 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>
Run Code Online (Sandbox Code Playgroud)

我只想选择工作流节点的第一级子级,并从该选择中排除服务节点,所以就我而言,我只希望

 <output ID="" URI="#out1"/>  
 <input ID="sessionToken" URI="#sessionToken"/>  
Run Code Online (Sandbox Code Playgroud)

选择了这两个节点,为此,我想在Java中使用XPATH。附加要求是所选节点必须具有URI参数。

我已经试过了:

XPathExpression expr = xpath.compile("//workflow[@URI='" + oldUrlValue.getNodeValue() + "'] | //workflow//*[not(local-name() = 'services') and @URI]");
Run Code Online (Sandbox Code Playgroud)

但是我得到的所有节点都带有URI参数,而不是只有主要工作流程节点和前两个子节点。

我已经试过了

har*_*r07 5

目前尚不清楚您所说的“一级孩子”是什么意思,因为services它与outputinput元素位于同一级别。如果你的意思是返回的直接子workflow没有任何进一步的子元素,那么你可以使用下面的XPath表达式:

//workflow/*[not(*)]
Run Code Online (Sandbox Code Playgroud)