我在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>
如何以某种方式查询此列,以便获取所有Ticker元素。 我知道如何根据父元素获取值。像这样:
SELECT `id`,ExtractValue(`xmlstring`, '/ParamaterInfoTestClass/TickerInfo/Ticker') AS result FROM `XMLTest`;
问题1: 是否有可能从TickerInfo和Benchmark元素获取两个代码(读取全部;如果有更多元素与tickerId子元素),而不用提前知道它们的名称。所以,或多或少基于通配符并链接到SomeIdElement(意思是,在与行情者的结果相同的行上具有SomeIdElement)
问题2: 如何更新xml列中的每个Ticker(sub)元素。假设自动收报机从ABC更改为XYZ,我需要更新所有的提示。通常U会使用像
这样的东西UPDATE `XMLTest` SET `xmlstring` = UpdateXml(`xmlstring`,'/ParamaterInfoTestClass/TickerInfo/Ticker','<Ticker>XYZ</Ticker>') where ExtractValue(`xmlstring`,'/ParamaterInfoTestClass/TickerInfo/Ticker')='ABC';
但在这种情况下(就像上面的情况一样)我需要知道Ticker元素之前的每个元素,以便能够更新XML。我希望能够一次更新所有Ticker元素,而无需事先知道确切的结构,也可以在XML内容多次包含特定值时更新。 可以这样做,如果是这样......怎么样?
问题3: 如何通过查询获取XML子元素/结构? 我试过这个:
SELECT ExtractValue(`xmlstring`, '/ParamaterInfoTestClass/TickerInfo') AS result FROM `XMLTest`;
亲切的问候,
Matthijs