xpath - Querying XML-fragment in SQL Server regardless of Xml tree depth -
I have some XML SQL server (column type type xml) which looks something like this
& lt; TreeRoot & gt; & Lt; Node id = "12" name = "name 2" & gt; & Lt; Node id = "54" name = "name 4654" & gt; & Lt; Node id = "75" name = "name 0 9 43"> node id = "58" name = "dfd2" & gt; & lt; / node & gt; & lt; / node & gt; & lt; lt; node id = "43" name = "543d32" gt; & lt; / node & gt; & lt; / node & gt; & lt; / node & gt; & lt; / TreeRoot & gt; I am trying to design a query on this XML which will give me a list of all node ID and node names, such as:
name ID ----------- Name 2 12 Name 4654 54 Name 9 43 57 DFD 2 58 543 D 32 43 I already have a query - But it is hard on specific levels of the tree, This means that I need to update this query because I add nodes in the XML piece.
Is there a way to create an XPath query that will give me this list - and in the future, additional levels
Thank you,
: -)
/ Jasper Copenhagen, Denmark
< div class = "post-text" itemprop = "text">
How about:
Enter DECLARE @XmlTable TABLE (ID INT is not, XmlData XML) @xmlTable (ID, XmlData) in Value (1, '&' LT; TreeRoot & gt; & Lt; Node id = "12" name = "name 2" & gt; & Lt; Node id = "54" name = "name 4654" & gt; & Lt; Node id = "75" name = "name 0 9 43" & gt; & Lt; Node id = "58" name = "dfd2" & gt; & Lt; / Node & gt; & Lt; / Node & gt; & Lt; Node id = "43" name = "543 d 32" & gt; & Lt; / Node & gt; & Lt; / Node & gt; & Lt; / Node & gt; & Lt; / TreeRoot & gt; ') SELECT NodeName = XC.value (' @ name ',' varchar (50) '), nodeid = xc.value (' @ id ',' int ') @xmlTable CROSS APPLY XmlData.nodes (' // node ') XT (XC) gives me the output you're looking for.
In fact, .nodes () XML will return a "virtual" table of pieces that corresponds to the xpath expression in the call - and // node all & lt; Node & gt; will select elements - regardless of where they live in the XML tree. Not sure that this is going to be super fast on big XML structures - but this should work.
Comments
Post a Comment