在嵌套条件下,如何引用“外部”括号对中的当前节点。假设我有以下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 2和3):
/Root/Gizmos/Gizmo[/Root/Validations/Validation[GizmoId = ?.Id]/Id = /Root/Approvals/ValidationId]
这是否允许,如果是,我会用问号代替什么?
答案 0 :(得分:3)
以下XPath返回Gizmo
2和3:
/Root/Gizmos/Gizmo[Id=/Root/Validations/Validation[Id=/Root/Approvals/ValidationId]/GizmoId]
为了打破这一点,内在表达
/Root/Validations/Validation[Id=/Root/Approvals/ValidationId]
返回Id
, viz 中包含Approval
的所有验证,
<Validation>
<Id>B</Id>
<GizmoId>2</GizmoId>
</Validation>
<Validation>
<Id>C</Id>
<GizmoId>3</GizmoId>
</Validation>
您可以使用该表达式过滤完整的Gizmo
列表,方法是将Id
与子表达式中的GizmoId
进行匹配。