xpath多作用域:从多个树中选择数据
问题:根据树的另一部分中的节点选择数据 如何使用label=“status”选择列的行中的数据 数据应为xpath多作用域:从多个树中选择数据,xpath,scope,nested,Xpath,Scope,Nested,问题:根据树的另一部分中的节点选择数据 如何使用label=“status”选择列的行中的数据 数据应为/result/rows/items/item/c/items/items/v 选择应基于label='status'即/result/cols/items/items/label=status 在下面的XML中,“status”是第2列,但它可能会更改为第1列,因此相应的XPath应该返回第1列的数据 <result> <cols> <item
/result/rows/items/item/c/items/items/v
选择应基于label='status'
即/result/cols/items/items/label=status
在下面的XML中,“status”是第2列,但它可能会更改为第1列,因此相应的XPath应该返回第1列的数据
<result>
<cols>
<items>
<item>
<id>c1</id>
<label>result</label>
<type>string</type>
</item>
<item>
<id>c2</id>
<label>status</label>
<type>string</type>
</item>
<item>
<id>c3</id>
<label>message</label>
<type>string</type>
</item>
</items>
</cols>
<rows>
<items>
<item>
<c>
<items>
<item>
<v>data1</v>
</item>
<item>
<v>data2</v>
</item>
<item>
<v />
</item>
</items>
</c>
</item>
</items>
</rows>
</result>
c1
结果
一串
c2
地位
一串
c3
消息
一串
数据1
数据2
我不知道你想要什么。但是,如果您正在寻找一个表达式,它将为所有带有文本“status”的标签获取“type”文本
你的描述不太清楚。 我是这样得到的: 有一个节点指示该列。该列的标签为“状态”。这个标签是你自己买的
/result/cols/items/item/label[text()='status']
但那不是你想要的。首先,您想知道该列位于哪个位置。你是靠你的努力得到这个职位的
count(/result/cols/items/item[label/text()='status']/preceding-sibling::*)+1
但那仍然不是你想要的。根据该信息,您希望选择行中的实际数据。你和我吵架了
/result/rows/items/item/c/items/item[2]/v/text()
但您并不总是想要行的第二列,而是想要基于前面确定的列索引的行。因此,您需要将两者结合起来:
/result/rows/items/item/c/items/item[count(/result/cols/items/item[label/text()='status']/preceding-sibling::*)+1]/v/text()
最后一个表达式不包含任何硬编码索引,仅使用列标题文本“status”来确定数据的位置。在您的示例中,它返回
data2
。如果您将列标题文本更改为“结果”,它将为您提供data1
到目前为止您尝试了哪些代码?不清楚您在问什么。请将您期望的输出添加到您的问题中。这是完美的:)。唐克斯托马斯
/result/rows/items/item/c/items/item[count(/result/cols/items/item[label/text()='status']/preceding-sibling::*)+1]/v/text()