Showing posts with label parse. Show all posts
Showing posts with label parse. Show all posts

Friday, March 23, 2012

How can I parse text held in MS SQL 2005 text field

Hi,
I been reading various web pages trying to figure out how I can extract some simple information from the XML below, but at present I cannot understand it.

I have a MS SQL 2005 database with which contains a field of type text (external database so field type cannot be changed to XML)
The text field in the database is similar to the one below but I have simplified it by remove many of the unneeded tags in the <before> and <after> blocks. I also reformatted it to show the structure (original had no spaces or returns)

For each text field in the SQL table contain the XML I need to know the OldVal and the NewVal.


<ProductMergeAudit>
<before>
<table name="table1" description="Test Desc">
<product id="OldVal">
</table>
</before>
<after>
<table name="table1" description="Test Desc">
<product id="NewVal">
</table>
</after>
</ProductMergeAudit>

Cast your TEXT to an XML datatype field and use:

SET

@.XML=CONVERT(XML,'<ProductMergeAudit>
<before>
<table name="table1" description="Test Desc">
<product id="OldVal"/>
</table>
</before>
<after>
<table name="table1" description="Test Desc">
<product id="NewVal"/>
</table>
</after>
</ProductMergeAudit>')
SELECT @.XML.value('(/ProductMergeAudit/before/table/product/@.id)[1]','varchar(50)'), @.XML.value('(/ProductMergeAudit/after/table/product/@.id)[1]','varchar(50)')

gives

OldVal NewVal

N.B. The line<product id="NewVal"/> had to have a / added at the end to make it valid XML.

|||

Thanks,
That work when selecting the value from a single row into a XML variable.

how can I parse

hi
Can some one help my, how can I parse the following XML.
<WhoisRecord>
<CreatedDate>1996-03-27T00:00:00Z</CreatedDate>
<UpdatedDate>2004-06-21T00:00:00Z</UpdatedDate>
<ExpiresDate>2014-03-28T00:00:00Z</ExpiresDate>
<Registrant>
<Name>Microsoft Corporation</Name>
<Address>One Microsoft Way</Address>
<City>Redmond</City>
<StateProvince>WA</StateProvince>
<PostalCode>98052</PostalCode>
<Country>US</Country>
<CountryCode>US</CountryCode>
</Registrant>
<Domain>
<Name>HOTMAIL.COM</Name>
<UpdatedDate>21-Jun-2004</UpdatedDate>
<ExpiresDate>28-Mar-2014</ExpiresDate>
<CreatedDate>27-Mar-1996</CreatedDate>
<NameServer>NS1.HOTMAIL.COM</NameServer>
<NameServer>NS3.HOTMAIL.COM</NameServer>
<NameServer>NS2.HOTMAIL.COM</NameServer>
<NameServer>NS4.HOTMAIL.COM</NameServer>
<NameServerAddress>216.200.206.140</NameServerAddress>
<NameServerAddress>209.185.130.68</NameServerAddress>
<NameServerAddress>216.200.206.139</NameServerAddress>
<NameServerAddress>64.4.29.24</NameServerAddress>
</Domain>
</WhoisRecord>
Look up OPENXML in Books Online.
Adam Machanic
SQL Server MVP
http://www.sqljunkies.com/weblog/amachanic
"Farhan" <Farhan@.discussions.microsoft.com> wrote in message
news:ECCC3FA5-AC99-49D3-8E61-7D893BCAF7D1@.microsoft.com...
> hi
> Can some one help my, how can I parse the following XML.
> <WhoisRecord>
> <CreatedDate>1996-03-27T00:00:00Z</CreatedDate>
> <UpdatedDate>2004-06-21T00:00:00Z</UpdatedDate>
> <ExpiresDate>2014-03-28T00:00:00Z</ExpiresDate>
> <Registrant>
> <Name>Microsoft Corporation</Name>
> <Address>One Microsoft Way</Address>
> <City>Redmond</City>
> <StateProvince>WA</StateProvince>
> <PostalCode>98052</PostalCode>
> <Country>US</Country>
> <CountryCode>US</CountryCode>
> </Registrant>
> <Domain>
> <Name>HOTMAIL.COM</Name>
> <UpdatedDate>21-Jun-2004</UpdatedDate>
> <ExpiresDate>28-Mar-2014</ExpiresDate>
> <CreatedDate>27-Mar-1996</CreatedDate>
> <NameServer>NS1.HOTMAIL.COM</NameServer>
> <NameServer>NS3.HOTMAIL.COM</NameServer>
> <NameServer>NS2.HOTMAIL.COM</NameServer>
> <NameServer>NS4.HOTMAIL.COM</NameServer>
> <NameServerAddress>216.200.206.140</NameServerAddress>
> <NameServerAddress>209.185.130.68</NameServerAddress>
> <NameServerAddress>216.200.206.139</NameServerAddress>
> <NameServerAddress>64.4.29.24</NameServerAddress>
> </Domain>
> </WhoisRecord>