September 18, 2017 at 12:45 pm
Hi
Can I parse an XML field as below,
For example parse out "Review Type"
Thanks
Joe
<Parameters xmlns="http://www.any.xsd">
<Parameter Name="Addendum2" StringValue="True" />
<Parameter Name="ReviewType" StringValue="140" />
<Parameter Name="Addendum_First_UserID" StringValue="4144296331" />
etc...
September 18, 2017 at 12:52 pm
Yes, you can. There are a lot of examples on the internet on how do so. I, myself, have to Google everytime I work with XML, as the syntax never sticks in my head. 🙂
Have a quick Google/Bing/etc of something like "Query XML T-SQL" and have a go. If you get stuck, post back what you've tried and we'll be able to give you some pointers and help on where you may have gone wrong.
Thom~
Excuse my typos and sometimes awful grammar. My fingers work faster than my brain does.
Larnu.uk
September 18, 2017 at 10:25 pm
Here is something to get you started
😎
USE TEEST;
GO
SET NOCOUNT ON;
DECLARE @TXML XML = '<ROOT>
<Parameters xmlns="http://www.any.xsd">
<Parameter Name="Addendum2" StringValue="True" />
<Parameter Name="ReviewType" StringValue="140" />
<Parameter Name="Addendum_First_UserID" StringValue="4144296331" />
</Parameters>
</ROOT>';
SELECT
PARAM.DATA.value('@Name' ,'VARCHAR(50)') AS PARAM_Name
,PARAM.DATA.value('@StringValue','VARCHAR(50)') AS PARAM_StringValue
FROM @TXML.nodes('*:ROOT/*:Parameters/*:Parameter') PARAM(DATA);
September 19, 2017 at 8:25 am
Thanks
A "bit" confused, but let me do some googling and I'm sure I'll be back with questions....
Thanks Again
September 19, 2017 at 8:42 am
So Maybe I'm close???
SELECT
[SqlParameters].value('declare namespace ns="http://www.any.com/WebFramework/WorkflowParameters.xsd"; (/ns:Parameters/ns:Addendum2)[1]','varchar(50)') AS TEST
FROM [WorkflowInstances]
but erring on no element found
Trying to parse Addendum2
using
<Parameters xmlns="http://www.any.xsd">
<Parameter Name="Addendum2" StringValue="True" />
<Parameter Name="ReviewType" StringValue="140" />
<Parameter Name="Addendum_First_UserID" StringValue="4144296331" />
etc...
September 19, 2017 at 9:03 am
jbalbo - Tuesday, September 19, 2017 8:42 AMSo Maybe I'm close???SELECT
[SqlParameters].value('declare namespace ns="http://www.any.com/WebFramework/WorkflowParameters.xsd"; (/ns:Parameters/ns:Addendum2)[1]','varchar(50)') AS TEST
FROM [WorkflowInstances]but erring on no element found
Trying to parse Addendum2
using<Parameters xmlns="http://www.any.xsd">
<Parameter Name="Addendum2" StringValue="True" />
<Parameter Name="ReviewType" StringValue="140" />
<Parameter Name="Addendum_First_UserID" StringValue="4144296331" />
etc...
Almost there, try this:USE Sandbox;
GO
CREATE TABLE Test (SampleXML xml);
GO
INSERT INTO Test
VALUES ('<Parameters xmlns="http://www.any.xsd">
<Parameter Name="Addendum2" StringValue="True" />
<Parameter Name="ReviewType" StringValue="140" />
<Parameter Name="Addendum_First_UserID" StringValue="4144296331" />
</Parameters>');
GO
WITH XMLNAMESPACES (DEFAULT 'http://www.any.xsd')
SELECT P.d.value('@Name','varchar(50)') AS ParameterName
FROM Test T
CROSS APPLY T.SampleXML.nodes('Parameters/Parameter') P(d);
GO
GO
DROP TABLE Test;
GO
You need to declare your namescape using the WITH syntax, and then you can query the XML "as normal".
Thom~
Excuse my typos and sometimes awful grammar. My fingers work faster than my brain does.
Larnu.uk
September 19, 2017 at 9:21 am
Great Sample..
Thanks you (even understand it..lol )
here is what I came up with
Thanks Again
Joe
WITH XMLNAMESPACES (DEFAULT 'http://www.any.xsd')
SELECT [Title],[view as]
--P.d.value('@Name','varchar(50)') AS ParameterName
--,P.d.value('@StringValue','varchar(50)') AS Parametervalue
FROM [WorkflowInstances] T
CROSS APPLY T.[SqlParameters].nodes('Parameters/Parameter') P(d)
where P.d.value('@Name','varchar(50)') = 'ProgramSite' and P.d.value('@StringValue','varchar(50)') = '101'
;
September 19, 2017 at 9:31 am
Eirikur Eiriksson - Monday, September 18, 2017 10:25 PMHere is something to get you started
😎
USE TEEST;
GO
SET NOCOUNT ON;DECLARE @TXML XML = '<ROOT>
<Parameters xmlns="http://www.any.xsd">
<Parameter Name="Addendum2" StringValue="True" />
<Parameter Name="ReviewType" StringValue="140" />
<Parameter Name="Addendum_First_UserID" StringValue="4144296331" />
</Parameters>
</ROOT>';SELECT
PARAM.DATA.value('@Name' ,'VARCHAR(50)') AS PARAM_Name
,PARAM.DATA.value('@StringValue','VARCHAR(50)') AS PARAM_StringValue
FROM @TXML.nodes('*:ROOT/*:Parameters/*:Parameter') PARAM(DATA);
Forum control messed up the code... changed the xml element names to start with xx since : + p gives you :p
DECLARE @TXML XML = '<ROOT>
<xxParameters xmlns="http://www.any.xsd">
<xxParameter Name="Addendum2" StringValue="True" />
<xxParameter Name="ReviewType" StringValue="140" />
<xxParameter Name="Addendum_First_UserID" StringValue="4144296331" />
</xxParameters>
</ROOT>';
SELECT
PARAM.DATA.value('@Name' ,'VARCHAR(50)') AS PARAM_Name,
PARAM.DATA.value('@StringValue','VARCHAR(50)') AS PARAM_StringValue
FROM @TXML.nodes('ROOT/*:xxParameters/*:xxParameter') PARAM(DATA);
-- Itzik Ben-Gan 2001
September 19, 2017 at 6:13 pm
I've found that it's much more fun to visit the person sending you the XML and just beat the crap out of them. 😉
--Jeff Moden
Change is inevitable... Change for the better is not.
Viewing 9 posts - 1 through 8 (of 8 total)
You must be logged in to reply to this topic. Login to reply