如何在mysql中查询和/或更新xml列

如何在mysql中查询和/或更新xml列,mysql,xml,select,updates,Mysql,Xml,Select,Updates,我在MySQL数据库中有一个XML列,它包含一个与此相比较的结构: <?xml version="1.0" encoding="utf-16"?> <ParamaterInfoTestClass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- left out the non important eleme

我在MySQL数据库中有一个XML列,它包含一个与此相比较的结构:

<?xml version="1.0" encoding="utf-16"?>
<ParamaterInfoTestClass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- left out the non important elements -->
  <TickerInfo>
    <TickerId>15</TickerId>
    <IsvId>5</IsvId>
    <Ticker>SomeTicker</Ticker>
    <IsvName>SomeIsv</IsvName>
  </TickerInfo>
  <Benchmark>
    <TickerId>10</TickerId>
    <IsvId>5</IsvId>
    <Ticker>AnotherTicker</Ticker>
    <IsvName>SomeIsv</IsvName>
  </Benchmark>
  <BarSize>000100</BarSize>
  <SomeIdElement>1</SomeIdElement>
</ParamaterInfoTestClass>
问题1: 是否可以从TickerInfo和基准元素中获取两个ticker(全部读取;如果有更多元素带有tickerId子元素),而不必事先知道它们的名称。因此,或多或少基于通配符并链接到SomeIdeElement(意思是,将SomeIdeElement与ticker的结果放在同一行上)

问题2: 如何更新xml列中的每个Ticker(sub)元素。假设股票代码从ABC改为XYZ,我需要更新所有的条款。通常你会使用类似

UPDATE `XMLTest` SET `xmlstring` = UpdateXml(`xmlstring`,'/ParamaterInfoTestClass/TickerInfo/Ticker','<Ticker>XYZ</Ticker>') where ExtractValue(`xmlstring`,'/ParamaterInfoTestClass/TickerInfo/Ticker')='ABC';
亲切问候,


Matthijs

q1:根据文档:
如果找到多个匹配项,则每个匹配元素的第一个子文本节点的内容将作为单个空格分隔字符串返回(按匹配顺序)。
当我运行此查询时,选择
id
,提取值(
xmlstring
,'Ticker'),作为
XMLTest
的结果;它返回空结果。
UPDATE `XMLTest` SET `xmlstring` = UpdateXml(`xmlstring`,'/ParamaterInfoTestClass/TickerInfo/Ticker','<Ticker>XYZ</Ticker>') where ExtractValue(`xmlstring`,'/ParamaterInfoTestClass/TickerInfo/Ticker')='ABC';
SELECT ExtractValue(`xmlstring`, '/ParamaterInfoTestClass/TickerInfo') AS result FROM `XMLTest`;