2013-04-24 64 views
1

在嵌套條件下,如何引用「外部」對括號中的當前節點。說我有以下XML:如何在XPath中創建引用其他節點的嵌套條件

<?xml version="1.0" encoding="utf-8"?> 
<Root> 
    <Gizmos> 
     <Gizmo> 
      <Id>1</Id> 
     </Gizmo> 
     <Gizmo> 
      <Id>2</Id> 
     </Gizmo> 
     <Gizmo> 
      <Id>3</Id> 
     </Gizmo> 
    </Gizmos> 
    <Validations> 
     <Validation> 
      <Id>A</Id> 
      <GizmoId>1</GizmoId> 
     </Validation> 
     <Validation> 
      <Id>B</Id> 
      <GizmoId>2</GizmoId> 
     </Validation> 
     <Validation> 
      <Id>C</Id> 
      <GizmoId>3</GizmoId> 
     </Validation> 
    </Validations> 
    <Approvals> 
     <ValidationId>B</ValidationId> 
     <ValidationId>C</ValidationId> 
    </Approvals> 
</Root> 

我想利用這個代碼過濾掉批准小玩意的節點集(即小玩意兒2和3):

/Root/Gizmos/Gizmo[/Root/Validations/Validation[GizmoId = ?.Id]/Id = /Root/Approvals/ValidationId] 

這是允許的,如果它是,我會用什麼來替代問號?

+0

由於「XSLT」和「範圍」具有誤導性,我已將其重新標記並重新命名。它只是在單個XPath exprss中進行遍歷。 – harpo 2013-04-24 16:16:05

回答

3

以下XPath返回Gizmo 2和3:

/Root/Gizmos/Gizmo[Id=/Root/Validations/Validation[Id=/Root/Approvals/ValidationId]/GizmoId] 

爲了打破這種下來一點,內表達

/Root/Validations/Validation[Id=/Root/Approvals/ValidationId] 

回報所有驗證被包含在Approval即其Id

<Validation> 
    <Id>B</Id> 
    <GizmoId>2</GizmoId> 
</Validation> 

<Validation> 
    <Id>C</Id> 
    <GizmoId>3</GizmoId> 
</Validation> 

您可以使用該表達式通過在子表達式中將IdGizmoId進行匹配來過濾完整的Gizmo列表。

相關問題