2

在嵌套条件下,如何在“外部”括号对中引用当前节点。假设我有以下 xml:

<?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>

我想使用此代码过滤出已批准的 gizmo 的节点集(即 gizmo 2 和 3):

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

这是否允许,如果允许,我会用什么代替问号?

4

1 回答 1

4

以下 XPath 返回Gizmo2 和 3:

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

为了打破这一点,内部表达

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

返回Id包含在 an 中的所有验证Approval

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

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

您可以使用该表达式Gizmo通过匹配子表达式来过滤完整列表IdGizmoId

于 2013-04-24T16:07:26.920 回答