我对SQL和xpath有一定的了解,但没有xquery。我如何编写查询以获取所有记录,其中一个字段中包含的XML具有同一元素的两个实例,这两个实例还包含子元素的匹配数据。
让我举例说明:
表:Fred
表格字段:id, time, xmlone, xmltwo.
我想在此表中查找xmlone
具有以下内容的所有记录:
<!--xmlstart-->
<!--...any number of elements-->
<elementone position="1">
<subelea>2010-01-01</subelea>
<subeleb>hg72</subeleb>
<subelec>George</subelec>
</elementone>
<!--...any number of elements here (may not end at same level)-->
<elementone position="2">
<subelea>2010-01-01</subelea>
<subeleb>hg72</subeleb>
<subelec>John</subelec>
</elementone>
<!--xmlend-->
注意我只想要subelea
和subeleb
匹配的匹配项。此外,可能还有elementone
的重复项,但除非subelea
和subeleb
的数据匹配,否则我并不关心。
答案 0 :(得分:1)
(: Self-join on all <elementone/> :)
for $i in //elementone, $j in //elementone
where $i != $j
(: Compare `$i` and `$j` on the subelements that should be equal (or whatever) :)
and $i/subelea eq $j/subelea
and $i/subeleb eq $j/subeleb
(: Return result :)
return $i
如果你需要处理重复项(在元素级别,不关心输入中是否有两个具有完全相同内容的元素),请将所有内容括在括号中并添加/.
(步骤操作处理一式两份)。
(
for $i in //elementone, $j in //elementone
where $i != $j
and $i/subelea eq $j/subelea
and $i/subeleb eq $j/subeleb
return $i
)/.