根据较低的 XML 值获取较高的 XPath 值
Getting Upper XPath Value Based on Lower XML value
如果 ItemOID REQUIRED.REQ_V 的值为“1”,我将尝试获取 SERepeatKey 的值。
在下面的例子中,我想 return 值 2。
这个 XML 可以吗?如果有怎么办?
有了这个,如果只有 1 个“数据”节点,我就可以做到,但现在有了 2 个,我就不知所措了。在 XPath 测试器中,我收到以下错误消息。
string(ODM/Data/SData[@SKey='003-003' and SiteRef[@LOID='SE 003']]/SEData[@SEOID='UNSCHEDULED']/@SERepeatKey)
“无法执行 XPath 操作。不允许将多个项目的序列作为 string() 的第一个参数(@SERepeatKey,@SERepeatKey)”
<ODM>
<Data SOID="(DEV)" MetaDataVersionOID="" >
<SData SKey="003-003" >
<SiteRef LOID="SE 003"/>
<SEData SEOID="UNSCHEDULED" SERepeatKey="1">
<FData FOID="REQUIRED" FormRepeatKey="1">
<IGData IGOID="REQUIRED" IGRepeatKey="0" TransactionType="Upsert">
<IData ItemOID="REQUIRED.REQ_V" Value="0" />
</IGData>
</FData>
</SEData>
</SData>
</Data>
<Data SOID="(DEV)" MetaDataVersionOID="" >
<SData SKey="003-003" >
<SiteRef LOID="SE 003"/>
<SEData SEOID="UNSCHEDULED" SERepeatKey="2">
<FData FOID="REQUIRED" FormRepeatKey="1">
<IGData IGOID="REQUIRED" IGRepeatKey="0" TransactionType="Upsert">
<IData ItemOID="REQUIRED.REQ_V" Value="1" />
</IGData>
</FData>
</SEData>
</SData>
</Data>
<Data SOID="(DEV)" MetaDataVersionOID="" >
<SData SKey="003-003" >
<SiteRef LOID="SE 003"/>
<SEData SEOID="UNSCHEDULED" SERepeatKey="3">
<FData FOID="REQUIRED" FormRepeatKey="1">
<IGData IGOID="REQUIRED" IGRepeatKey="0" TransactionType="Upsert">
<IData ItemOID="REQUIRED.REQ_V" Value="1" />
</IGData>
</FData>
</SEData>
</SData>
这个 XPath 应该可以满足您的需求:
//Data[.//IData[@ItemOID='REQUIRED.REQ_V' and @Value='1']]//SEData/@SERepeatKey
根据所提供的 XML 看起来您甚至可以省略 @ItemOID='REQUIRED.REQ_V'
并使此表达式更简单
//Data[.//IData[@Value='1']]//SEData/@SERepeatKey
如果 ItemOID REQUIRED.REQ_V 的值为“1”,我将尝试获取 SERepeatKey 的值。 在下面的例子中,我想 return 值 2。 这个 XML 可以吗?如果有怎么办?
有了这个,如果只有 1 个“数据”节点,我就可以做到,但现在有了 2 个,我就不知所措了。在 XPath 测试器中,我收到以下错误消息。
string(ODM/Data/SData[@SKey='003-003' and SiteRef[@LOID='SE 003']]/SEData[@SEOID='UNSCHEDULED']/@SERepeatKey)
“无法执行 XPath 操作。不允许将多个项目的序列作为 string() 的第一个参数(@SERepeatKey,@SERepeatKey)”
<ODM>
<Data SOID="(DEV)" MetaDataVersionOID="" >
<SData SKey="003-003" >
<SiteRef LOID="SE 003"/>
<SEData SEOID="UNSCHEDULED" SERepeatKey="1">
<FData FOID="REQUIRED" FormRepeatKey="1">
<IGData IGOID="REQUIRED" IGRepeatKey="0" TransactionType="Upsert">
<IData ItemOID="REQUIRED.REQ_V" Value="0" />
</IGData>
</FData>
</SEData>
</SData>
</Data>
<Data SOID="(DEV)" MetaDataVersionOID="" >
<SData SKey="003-003" >
<SiteRef LOID="SE 003"/>
<SEData SEOID="UNSCHEDULED" SERepeatKey="2">
<FData FOID="REQUIRED" FormRepeatKey="1">
<IGData IGOID="REQUIRED" IGRepeatKey="0" TransactionType="Upsert">
<IData ItemOID="REQUIRED.REQ_V" Value="1" />
</IGData>
</FData>
</SEData>
</SData>
</Data>
<Data SOID="(DEV)" MetaDataVersionOID="" >
<SData SKey="003-003" >
<SiteRef LOID="SE 003"/>
<SEData SEOID="UNSCHEDULED" SERepeatKey="3">
<FData FOID="REQUIRED" FormRepeatKey="1">
<IGData IGOID="REQUIRED" IGRepeatKey="0" TransactionType="Upsert">
<IData ItemOID="REQUIRED.REQ_V" Value="1" />
</IGData>
</FData>
</SEData>
</SData>
这个 XPath 应该可以满足您的需求:
//Data[.//IData[@ItemOID='REQUIRED.REQ_V' and @Value='1']]//SEData/@SERepeatKey
根据所提供的 XML 看起来您甚至可以省略 @ItemOID='REQUIRED.REQ_V'
并使此表达式更简单
//Data[.//IData[@Value='1']]//SEData/@SERepeatKey