我有这个示例 xml
<ProductSaleItem>
<ItemReference>100</ItemReference>
<Discount>
<Modifier>1</Modifier>
</Discount>
</ProductSaleItem>
<ProductSaleItem>
<ItemReference>101</ItemReference>
<Discount>
<Modifier>1</Modifier>
</Discount>
<Discount>
<Modifier>2</Modifier>
</Discount>
</ProductSaleItem>
<ProductSaleItem>
<ItemReference>102</ItemReference>
</ProductSaleItem>
还有这个 xpath
//ProductSaleItem[Discount/Modifier]/ItemReference
我希望能得到
100 101
但我得到的只是
100
看来两个折扣正在阻止节点被包含 请问我该如何修复我的谓词?
这是在mysql中所以使用xpath 1.0
select extractvalue( "<ProductSaleItem><ItemReference>100</ItemReference><Discount> <Modifier>1</Modifier></Discount></ProductSaleItem><ProductSaleItem> <ItemReference>101</ItemReference><Discount><Modifier>1</Modifier></Discount>
<Discount><Modifier>2</Modifier></Discount></ProductSaleItem><ProductSaleItem>
<ItemReference>102</ItemReference</ProductSaleItem>","//ProductSaleItem[*/Modifier]/ItemReference") bob;
我尝试过在线xpath解析器,有些使用xpath 2.0,它似乎可以工作,但mysql拒绝工作。
extractvalue()
返回第一个节点
如果找到多个匹配项,则每个匹配元素的第一个子文本节点的内容将作为单个空格分隔的字符串返回(按匹配的顺序)。
按照文档中的建议,应该进行迭代(存储过程或类似的)
WHILE i < 4 DO
SELECT xml, i, ExtractValue(xml, '//a[$i]');
SET i = i+1;
END WHILE;
获取
Modifier
值可能会有所帮助,如下
select extractvalue( "<ProductSaleItem>
<ItemReference>100</ItemReference>
<Discount><Modifier>1</Modifier></Discount>
</ProductSaleItem>
<ProductSaleItem>
<ItemReference>101</ItemReference>
<Discount><Modifier>1</Modifier></Discount>
<Discount><Modifier>2</Modifier></Discount>
</ProductSaleItem>
<ProductSaleItem>
<ItemReference>102</ItemReference>
</ProductSaleItem>","//ItemReference") bob,
extractvalue( "<ProductSaleItem><ItemReference>100</ItemReference><Discount> <Modifier>1</Modifier></Discount></ProductSaleItem><ProductSaleItem> <ItemReference>101</ItemReference><Discount><Modifier>1</Modifier></Discount>
<Discount><Modifier>2</Modifier></Discount></ProductSaleItem><ProductSaleItem>
<ItemReference>102</ItemReference></ProductSaleItem>","//ProductSaleItem/Discount[1]/Modifier") alice;
输出:
+-------------+-------+
| bob | alice |
+-------------+-------+
| 100 101 102 | 1 1 |
+-------------+-------+