sql
  • xml
  • 2017-07-31 88 views -1 likes 
    -1

    如何在此回報中選擇「值」。SQL XML選擇值

    <int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">247734</int> 
    

    我已經試過

    DECLARE @XML XML 
    SET @XML = '<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">247734</int>' 
    
    SELECT @XML.value('(/int)[1]', 'varchar(30)') 
    FROM @xml.nodes('/int') Tbl (Col) 
    

    但我沒有返回值。

    回答

    0

    嘗試以下

    DECLARE @XML XML 
    SET @XML = '<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">247734</int>' 
    
    SELECT Col.value('(.)[1]', 'int') 
    FROM @xml.nodes('//*') As Tbl (Col) 
    
    2

    您可以定義的別名命名空間,然後使用該別名中的XPath。

    沒有指定名稱空間,xpath只能找到沒有名稱空間的標籤。

    或者你可以看看在XPath任何關於命名空間*:

    例如:

    DECLARE @XML XML = N'<xml> 
        <int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">247734</int> 
        <int>123</int> 
    </xml>'; 
    
    -- method 1 
    ;WITH XMLNAMESPACES('http://schemas.microsoft.com/2003/10/Serialization/' AS s) 
    SELECT Col.value('.', 'int') as Col 
    FROM @XML.nodes('//s:int') Tbl (Col); 
    
    -- method 2 
    SELECT Col.value('.', 'int') as Col 
    FROM @XML.nodes('//*:int') Tbl (Col); 
    

    注意如何方法1只找到的第一個值,而方法2個發現兩者。

    0

    此問題是您的XML位於已定義的名稱空間中,並且您嘗試使用「默認名稱空間」進行選擇。

    要解決的問題,您應該定義在選擇的命名空間:

    DECLARE @XML XML 
    SET @XML = '<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">247734</int>' 
    
    SELECT @XML.value('declare namespace ns="http://schemas.microsoft.com/2003/10/Serialization/"; (/ns:int)[1]', 'varchar(30)') 
    FROM @xml.nodes('/') Tbl (Col) 
    
    相關問題