根据较低的 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