Xquery找到xml元素的值

时间:2016-11-17 19:35:46

标签: tsql xquery

全部,当名称的值为org_id时,我试图获取元素的值。此xml由外部进程放置在数据库中我无法控制。 可能有多个 ParematerValue 节点,因此当名称是org_Id时,我不确定 Value 元素的位置。唯一的保证是将只有一个元素名称,其值为org_id。

在这种情况下,有没有办法找到的值?

示例xml(my_xml)

 <ParameterValues>  
        <ParameterValue>
            <Name>car_model</Name>
            <Value>All</Value>
        </ParameterValue>
        <ParameterValue>
            <Name>debug</Name>
            <Value>0</Value>
        </ParameterValue>
        <ParameterValue>
            <Name>org_Id</Name>
            <Value>123456</Value>
        </ParameterValue>
    </ParameterValues>

My XQuery 

    select  
        my_xml.value('(/ParameterValues/ParameterValue/Value)[3]','int') as org_wk

    from 
        #test_xml 
    where
        my_xml.exist('/ParameterValues/ParameterValue/Name[text() = "org_Id"]') = 1

1 个答案:

答案 0 :(得分:3)

这应该可以解决问题:

-- sample data
CREATE TABLE #test_xml (my_xml XML);
INSERT #test_xml
VALUES
('<ParameterValues>  
            <ParameterValue>
                <Name>car_model</Name>
                <Value>All</Value>
            </ParameterValue>
            <ParameterValue>
                <Name>debug</Name>
                <Value>0</Value>
            </ParameterValue>
            <ParameterValue>
                <Name>org_Id</Name>
                <Value>123456</Value>
            </ParameterValue>
        </ParameterValues>');

-- solution    
SELECT x2.p.value('(text())[1]', 'varchar(100)') 
FROM #test_xml x1
CROSS APPLY x1.my_xml.nodes('//ParameterValue[Name="org_Id"]/Value') x2(p);