2016-05-07 15 views
1

xmlファイルを読み込む必要がありますが、xmlに名前空間があるため問題がありますが、いくつか解決策を試しましたが問題を解決できません。xmlファイルを名前空間で読む

xmlファイルは、この

<?xml version="1.0" encoding="UTF-8"?> 
<Status:orders xmlns:Status="http://www.test.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.test.com Status.xsd"> 
    <order> 
    <Header> 
     <Name>500039</Name> 
     <Letter>A</Letter> 
    </Header> 
    </order> 
</Status:orders> 

のように見えますが、事前に名前や文字タグの値に

感謝を取得する方法を助けることができます。あなたの友人がWITH XMLNAMESPACESと呼ばれる

+0

...できるだけ具体的に、良いアドバイスですelivこんにちは、この質問は解決はありますか?さらに助けが必要ですか? – Shnugo

答えて

0

...

はアスタリスクを使用して、代替だったこの

DECLARE @xml XML= 
'<?xml version="1.0" encoding="UTF-8"?> 
<Status:orders xmlns:Status="http://www.test.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.test.com Status.xsd"> 
    <order> 
    <Header> 
     <Name>500039</Name> 
     <Letter>A</Letter> 
    </Header> 
    </order> 
</Status:orders>'; 

WITH XMLNAMESPACES('http://www.test.com' AS Status) 
SELECT @xml.value('(/Status:orders/order/Header/Name)[1]','int') 
     ,@xml.value('(/Status:orders/order/Header/Letter)[1]','varchar(max)'); 

ようにそれを試してみてください。

SELECT @xml.value('(/*:orders/order/Header/Name)[1]','int') 
     ,@xml.value('(/*:orders/order/Header/Letter)[1]','varchar(max)'); 

別の方法としては、これだった:

SELECT @xml.value('(//Name)[1]','int') 
     ,@xml.value('(//Letter)[1]','varchar(max)'); 

しかし、一般的に、それは