Xpath 1.0 Mysql 问题

问题描述 投票:0回答:1

我有这个示例 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拒绝工作。

mysql xpath
1个回答
0
投票

根据Mysql docs

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   |
+-------------+-------+
© www.soinside.com 2019 - 2024. All rights reserved.