Xquery-使用XMLtable从XML中选择值
我想使用XQuery在以下XML中显示Xquery-使用XMLtable从XML中选择值,xml,db2,xquery,Xml,Db2,Xquery,我想使用XQuery在以下XML中显示FrequencyCdvalue=“01”和city type=“first”的值 你能帮我吗 <Envelope> <Arrangement> <FrequencyCd value="01">first first</FrequencyCd> <FrequencyCd value="02">first second</FrequencyCd> <contactinfo>
FrequencyCdvalue=“01”
和city type=“first”
的值
你能帮我吗
<Envelope>
<Arrangement>
<FrequencyCd value="01">first first</FrequencyCd>
<FrequencyCd value="02">first second</FrequencyCd>
<contactinfo> <Address>
<street>234 Rolling Lane</street>
<city type="first">Rockport</city>
</Address>
<email>love2fish@finmail.com</email>
</contactinfo>
</Arrangement>
<Arrangement>
<FrequencyCd value="03">second first</FrequencyCd>
<FrequencyCd value="04">second second</FrequencyCd>
<contactinfo>
<Address>
<street>234 Straight Lane</street>
<city type="first">Crackport</city>
</Address>
<email>hate2fish@finmail.com</email>
</contactinfo>
</Arrangement>
</Envelope>
首先
第一秒
234滚动车道
洛克波特
love2fish@finmail.com
第二优先
第二秒
234直道
克拉克波特
hate2fish@finmail.com
这种方法在内部分解更多行,但允许将复合筛选条件(FrequencyCd和City的条件)实现为分解XML数据(XMLTABLE函数的输出)的SQL表示形式上的一个简单WHERE子句
使用origxml(xdoc)作为(值)的,XMLPARSE(文档
'
首先
第一秒
234滚动车道
洛克波特
love2fish@finmail.com
第二优先
第二秒
234直道
克拉克波特
hate2fish@finmail.com
'
)
)
从origxml中选择filteredxml.FrequencyCd、filteredxml.City,
XMLTABLE(“$d/Envelope/Arrangement”将origxml.xdoc作为“d”传递)
柱
FrequencyCd VARCHAR(20)路径'FrequencyCd[@value=“01”]/text(),
City VARCHAR(30)路径'contactinfo/Address/City[@type=“first”]/text()
)as filteredxml
其中filteredxml.FrequencyCd不为空
和filteredxml.City不为空
;
您试图显示什么值?xpath/Envelope/Arrangement[FrequencyCd/@value='01'和contactinfo/Address/city/@type='first']
应该可以让您开始使用了。非常感谢开发人员-我能够为此获得xpath,但当我尝试将其放入Xquery时(实际上我们需要一个DB2查询)显示频率代码01和city type=First的值非常感谢Fred-这很有效-我还有一个要求,我应该使用//(即XML中的任何位置),即使用//Arrangement/FrequencyCd[@value=“01”]但是当我尝试时,我得到了一个错误。非常感谢Fred-这很有效-我还有一个要求,我应该使用//(即它存在于XML中的任何地方),即使用//Arrangement/FrequencyCd[@value=“01”],但当我尝试时,我得到了一个错误。-我还尝试删除“$d/Envelope/Arrangement”-通知您的帮助,从testxml、XMLTABLE中选择filteredxml.FrequencyCd、filteredxml.City(“$d/Envelope/Arrangement”将testxml.contact作为“d”列传递给FrequencyCd VARCHAR(20)PATH“//FrequencyCd[@value=“02”]/text()”,City VARCHAR 30)PATH“//contactinfo/Address/City[@type=“first”]/text()”)作为filteredxml,这是一个示例XML,我的实际需求是处理更大的XML—我想知道是否有一种方法可以在同一个Xquery中引用不同的路径,如//ABC/DEF/GHI和??MNO/PQR/STUXMLTABLE需要知道生成行的表达式是什么才能工作。如果您的XML文档没有以一种有意义的方式组织为一个表,那么您将无法在单个XMLTABLE调用中获得所需的结果。在这些情况下,您可以将多个XMLTABLE表达式连接在一起,或者通过XSLTRANSFORM运行文档,对其进行彻底的重新组织,以使其与一个XMLTABLE表达式一起工作。
with origxml(xdoc) AS (VALUES XMLPARSE( DOCUMENT
'<Envelope>
<Arrangement>
<FrequencyCd value="01">first first</FrequencyCd>
<FrequencyCd value="02">first second</FrequencyCd>
<contactinfo> <Address>
<street>234 Rolling Lane</street>
<city type="first">Rockport</city>
</Address>
<email>love2fish@finmail.com</email>
</contactinfo>
</Arrangement>
<Arrangement>
<FrequencyCd value="03">second first</FrequencyCd>
<FrequencyCd value="04">second second</FrequencyCd>
<contactinfo>
<Address>
<street>234 Straight Lane</street>
<city type="first">Crackport</city>
</Address>
<email>hate2fish@finmail.com</email>
</contactinfo>
</Arrangement>
</Envelope>'
)
)
SELECT filteredxml.FrequencyCd, filteredxml.City FROM origxml,
XMLTABLE ('$d/Envelope/Arrangement' PASSING origxml.xdoc AS "d"
COLUMNS
FrequencyCd VARCHAR(20) PATH 'FrequencyCd[@value="01"]/text()',
City VARCHAR(30) PATH 'contactinfo/Address/city[@type="first"]/text()'
) as filteredxml
WHERE filteredxml.FrequencyCd IS NOT NULL
AND filteredxml.City IS NOT NULL
;