Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xquery-使用XMLtable从XML中选择值_Xml_Db2_Xquery - Fatal编程技术网

Xquery-使用XMLtable从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>

我想使用XQuery在以下XML中显示
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
;