xpath根据多级条件获取第一个元素
xpath get first element based on multi-level condition
我有以下 xml.
<root>
<h>
<seg>
<hfield1>hA</hfield1>
<hfield2>h1</hfield2>
</seg>
<seg>
<hfield1>hB</hfield1>
<hfield2>h2</hfield2>
</seg>
</h>
<i>
<iseg>
<ifield1>i1</ifield1>
</iseg>
<iseg>
<ifield1>i2</ifield1>
</iseg>
</i>
<i>
<iseg>
<ifield1>i3</ifield1>
</iseg>
<iseg>
<ifield1>i4</ifield1>
</iseg>
</i>
如果 hfield2 = 'h2' 并且至少有一个 ifield1 = 'i2',我需要提取 hfiel1 的值。
我正在尝试使用此表达式的 xpath 1.0。结果我期望 'hB' 但它不起作用。
//seg/hfield1/text()[..//hfield2/text() = 'h2' and //ifield1 = 'i2'][1]
我该怎么办?
BR
试试这个 XPath-1.0 表达式:
//seg/hfield1[../hfield2 = 'h2' and //ifield1 = 'i2']
除了 zx485 的解决方案之外,您还可以使用以下 XPath 1:0 表达式来实现:
//seg/hfield2[text() = 'h2' and //ifield1 = 'i2']/preceding-sibling::hfield1
如果您的 xml-tree 变得更大,我建议使用更明确的 XPath,即:
/root[i/iseg/ifield1='i2']/h/seg[hfield2='h2']/hfield1/text()
我有以下 xml.
<root>
<h>
<seg>
<hfield1>hA</hfield1>
<hfield2>h1</hfield2>
</seg>
<seg>
<hfield1>hB</hfield1>
<hfield2>h2</hfield2>
</seg>
</h>
<i>
<iseg>
<ifield1>i1</ifield1>
</iseg>
<iseg>
<ifield1>i2</ifield1>
</iseg>
</i>
<i>
<iseg>
<ifield1>i3</ifield1>
</iseg>
<iseg>
<ifield1>i4</ifield1>
</iseg>
</i>
如果 hfield2 = 'h2' 并且至少有一个 ifield1 = 'i2',我需要提取 hfiel1 的值。 我正在尝试使用此表达式的 xpath 1.0。结果我期望 'hB' 但它不起作用。
//seg/hfield1/text()[..//hfield2/text() = 'h2' and //ifield1 = 'i2'][1]
我该怎么办?
BR
试试这个 XPath-1.0 表达式:
//seg/hfield1[../hfield2 = 'h2' and //ifield1 = 'i2']
除了 zx485 的解决方案之外,您还可以使用以下 XPath 1:0 表达式来实现:
//seg/hfield2[text() = 'h2' and //ifield1 = 'i2']/preceding-sibling::hfield1
如果您的 xml-tree 变得更大,我建议使用更明确的 XPath,即:
/root[i/iseg/ifield1='i2']/h/seg[hfield2='h2']/hfield1/text()