如何使用XMLNAMESPACES从XML获取数据

时间:2016-05-31 10:01:02

标签: sql-server xml tsql xquery xml-namespaces

我有一个像这样的XML文件

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
    <env:Header/>
    <env:Body>
        <ns0:getDateIdentificareResponse xmlns:ns0="/asdf/asdf/types/">
            <ns1:result xmlns:ns0="/asdf/asdf/" xmlns:ns1="/asdf/asdf/types/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns0:CustomerSDO">
                <ns0:Cif>1</ns0:Cif>
                <ns0:Cui>2</ns0:Cui>
                <ns0:CategorieClient>mm</ns0:CategorieClient>
                <ns0:NrInregistrare>xxxx</ns0:NrInregistrare>
                <ns0:CodCaen>dsaads</ns0:CodCaen>
                <ns0:Telefon xsi:nil="true"/>
                <ns0:AdresaSediu>
                    <ns0:Cif>2</ns0:Cif>
                    <ns0:Tara>2</ns0:Tara>
                    <ns0:Judet>3</ns0:Judet>
                    <ns0:Localitate>4</ns0:Localitate>
                    <ns0:CodPostal xsi:nil="true"/>
                    <ns0:Sector xsi:nil="true"/>
                    <ns0:Strada>5</ns0:Strada>
                    <ns0:Numar>6</ns0:Numar>
                    <ns0:Bloc xsi:nil="true"/>
                    <ns0:Scara xsi:nil="true"/>
                    <ns0:Etaj xsi:nil="true"/>
                    <ns0:Apartament xsi:nil="true"/>
                    <ns0:BulkAddress>sddsa</ns0:BulkAddress>
                </ns0:AdresaSediu>
                <ns0:AdresaCorespondenta>
                    <ns0:Cif>2</ns0:Cif>
                    <ns0:Tara>2</ns0:Tara>
                    <ns0:Judet>3</ns0:Judet>
                    <ns0:Localitate>4</ns0:Localitate>
                    <ns0:CodPostal xsi:nil="true"/>
                    <ns0:Sector xsi:nil="true"/>
                    <ns0:Strada>5</ns0:Strada>
                    <ns0:Numar>6</ns0:Numar>
                    <ns0:Bloc xsi:nil="true"/>
                    <ns0:Scara xsi:nil="true"/>
                    <ns0:Etaj xsi:nil="true"/>
                    <ns0:Apartament xsi:nil="true"/>
                    <ns0:BulkAddress>sddsa</ns0:BulkAddress>
                </ns0:AdresaCorespondenta>
                <ns0:BeneficiariReali>
                    <ns0:CifClient>Valuue</ns0:CifClient>
                    <ns0:CifBeneficiar>Valuue</ns0:CifBeneficiar>                   
                </ns0:BeneficiariReali>
                <ns0:BeneficiariReali>
                    <ns0:CifClient>Valuue</ns0:CifClient>
                    <ns0:CifBeneficiar>Valuue</ns0:CifBeneficiar>

                </ns0:BeneficiariReali>
                <ns0:Conturi>
                    <ns0:CifClient>Valuue</ns0:CifClient>
                    <ns0:CifBeneficiar>Valuue</ns0:CifBeneficiar>
                </ns0:Conturi>
                <ns0:Imputerniciti>
                    <ns0:CifClient>Valuue</ns0:CifClient>
                    <ns0:CifBeneficiar>Valuue</ns0:CifBeneficiar>
                </ns0:Imputerniciti>
            </ns1:result>
        </ns0:getDateIdentificareResponse>
    </env:Body>
</env:Envelope>

我找不到在SQL中导入数据的方法。

我知道这应该是相当容易的

How can I query a value in a XML column in SQL Server 2008

https://dba.stackexchange.com/questions/117005/import-xml-files-into-sql-server-2012

但我错过了一些东西。运行第二个问题解决方案不会得到我的任何东西。对于第一个问题,我不知道写什么作为XMLNAMESPACES的参数。

任何人都可以帮助我吗?谢谢

1 个答案:

答案 0 :(得分:1)

尝试使用*

SELECT t.c.value('(*:Cif/text())[1]', 'INT')
FROM @x.nodes('*:Envelope/*:Body/*:getDateIdentificareResponse/*:result') t(c)