简体   繁体   中英

Not getting XML Parsed values using Nodes Method in SQL Server?

I'm trying parse and get values of below xml with following code, But I'm not able to get the values it's returning empty or NULL values.

What I'm missing in my xml parsing code?

   declare @AddressXML as xml = '<Address>
  <Details FkTypeOfAddress="1" Address1="gh" Address2="yu" Address3="gh" Landmark="gh" City="Kolkata" Pincode="777777" State="ARU" />
  <Details FkTypeOfAddress="2" Address1="io" Address2="io" Address3="io" Landmark="io" City="Kolkata" Pincode="999999" State="GOA" />
</Address>'

SELECT    [Table].[Column].value('(FkTypeOfAddress) [1]','BIGINT') as FkTypeOfAddress
                        ,[Table].[Column].value('(Address1) [1]','varchar(100)') as Address1
                        ,[Table].[Column].value('(Address2) [1]','varchar(100)') as Address2 
                        ,[Table].[Column].value('(Address3) [1]','varchar(100)') as Address3
                        ,[Table].[Column].value('(Landmark) [1]','varchar(200)') as Landmark
                        ,[Table].[Column].value('(City) [1]','varchar(100)') as City
                        ,[Table].[Column].value('(Pincode) [1]','varchar(10)') as Pincode
                        ,[Table].[Column].value('(State) [1]','varchar(50)') as [State]                     
               FROM      @AddressXML.nodes('/Address/Details') as  [Table]([Column]);

在此处输入图片说明

In XPath/XQuery, you are supposed to use @ at the beginning of attribute name to reference an attribute :

SELECT
    [Table].[Column].value('@FkTypeOfAddress','BIGINT') as FkTypeOfAddress
    ,[Table].[Column].value('@Address1','varchar(100)') as Address1
    ,[Table].[Column].value('@Address2','varchar(100)') as Address2 
    ,[Table].[Column].value('@Address3','varchar(100)') as Address3
    ,[Table].[Column].value('@Landmark','varchar(200)') as Landmark
    ,[Table].[Column].value('@City','varchar(100)') as City
    ,[Table].[Column].value('@Pincode','varchar(10)') as Pincode
    ,[Table].[Column].value('@State','varchar(50)') as [State]                     
FROM @AddressXML.nodes('/Address/Details') as  [Table]([Column]);

After little smart goggling I found solution.

declare @AddressXML as xml = '<Address>
  <Details FkTypeOfAddress="1" Address1="gh" Address2="yu" Address3="gh" Landmark="gh" City="Kolkata" Pincode="777777" State="ARU" />
  <Details FkTypeOfAddress="2" Address1="io" Address2="io" Address3="io" Landmark="io" City="Kolkata" Pincode="999999" State="GOA" />
</Address>'

SELECT    [Table].[Column].value('(@FkTypeOfAddress) [1]','BIGINT') as FkTypeOfAddress
                        ,[Table].[Column].value('(@Address1) [1]','varchar(100)') as Address1
                        ,[Table].[Column].value('(@Address2) [1]','varchar(100)') as Address2 
                        ,[Table].[Column].value('(@Address3) [1]','varchar(100)') as Address3
                        ,[Table].[Column].value('(@Landmark) [1]','varchar(200)') as Landmark
                        ,[Table].[Column].value('(@City) [1]','varchar(100)') as City
                        ,[Table].[Column].value('(@Pincode) [1]','varchar(10)') as Pincode
                        ,[Table].[Column].value('(@State) [1]','varchar(50)') as [State]                        
               FROM      @AddressXML.nodes('/Address/Details') as  [Table]([Column]);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM