【问题标题】:XPath Parsing Specific NodesXPath 解析特定节点
【发布时间】:2020-05-19 15:49:48
【问题描述】:

我需要通过索引为那些匹配 '"Ref Location="C1"' AND '"EventData ID="W12"' 获取 'ItemKey="X"' 值。如果您注意到,所有四个都有“Ref Location="C1",但只有最后 3 个有'"EventData ID="W12"'

<Object>
<Level1>
    <Level2>
        <Ref Location="C1"/>
        <EventData ID="W6" EventKey="1">
            <FormData ID="NL">
                <ItemData ItemID="LINE" ItemKey="1">...</ItemData>
            </FormData>
        </EventData>
    </Level2>
</Level1>
<Level1>
    <Level2>
        <Ref Location="C1"/>
        <EventData ID="W12" EventKey="1">
            <FormData ID="NL">
                <ItemData ItemID="LINE" ItemKey="1">...</ItemData>
            </FormData>
        </EventData>
    </Level2>
</Level1>
<Level1>
    <Level2>
        <Ref Location="C1"/>
        <EventData ID="W12" EventKey="1">
            <FormData ID="NL">
                <ItemData ItemID="LINE" ItemKey="2">...</ItemData>
            </FormData>
        </EventData>
    </Level2>
</Level1>
<Level1>
    <Level2>
        <Ref Location="C1"/>
        <EventData ID="W12" EventKey="1">
            <FormData ID="NL">
                <ItemData ItemID="LINE" ItemKey="3">...</ItemData>
            </FormData>
        </EventData>
    </Level2>
</Level1>

目前我有

(/Object/Level1/Level2/Ref[@Location='C1'])[2]/../EventData[@ID='W12']/FormData/ItemData/@ItemKey

其中 X 是索引,但它为所有“C1”节点获取 ItemKey="X"。我只需要为 ID="W12" 节点获取 ItemKey="X"。

当路径包含 '[X]' 时的期望结果

[1] -> ItemKey="1"    // ID = "W12"
[2] -> ItemKey="2"    // ID = "W12"
[3] -> ItemKey="3"    // ID = "W12"

【问题讨论】:

    标签: java xml parsing xpath


    【解决方案1】:

    这应该可行:

    //ItemData[preceding::Ref[1][@Location="C1"][following-sibling::EventData[@ID="W12"]]]/@ItemKey
    

    输出:3 个值:

    1
    2
    3
    

    【讨论】:

    【解决方案2】:

    我发现将索引字段沿路径向下移动很有效。

    (/Object/Level1/Level2/Ref[@Location='C1']/../EventData[@ID='W12'])[1]/FormData/ItemData/@ItemKey
    

    【讨论】:

      【解决方案3】:

      要指定包含特定 Ref 元素的 Level2 元素,请使用 []

      /Level2[Ref[@Location='C1']]
      

      所以你的 XPath 变成了:

      "/Object/Level1/Level2[Ref[@Location='C1']]" +
      "/EventData[@ID='W12']/FormData/ItemData/@ItemKey"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-14
        • 1970-01-01
        • 2018-05-03
        • 1970-01-01
        • 1970-01-01
        • 2015-01-06
        • 2012-03-21
        • 1970-01-01
        相关资源
        最近更新 更多