2017-07-22 1 views
0

Der Code wird für diese selbsterklärend an die richtige Person sein, aber alle Fragen wenden Sie sich bitte rufen ...Parsen von XML in SQL ohne Namespace

Danke, Dave

DECLARE @XML XML 

SET @XML = 
'<?xml version="1.0" encoding="utf-8"?> 
<updates> 
    <versions> 
<installer type="A" Xversion="101" iniSizeInBytes="22480" dataSizeInBytes="23396349" msiSizeInBytes="4732928" /> 
<installer type="B" Yversion="201" iniSizeInBytes="22480" dataSizeInBytes="116687353" msiSizeInBytes="5807616" webconfigModifierSizeInBytes="11800" /> 
<installer type="A" Xversion="102" iniSizeInBytes="22480" dataSizeInBytes="23396349" msiSizeInBytes="4732928" /> 
<installer type="B" Yversion="202" iniSizeInBytes="22480" dataSizeInBytes="116687353" msiSizeInBytes="5807616" webconfigModifierSizeInBytes="11800" /> 
    </versions> 
    <update setNumber="1" XVersion="101" YVersion="201"> 
    <detail Ref="1000">some detail info for 101 and 201</detail> 
    </update> 
    <update setNumber="2" XVersion="102" YVersion="202"> 
    <detail Ref="1001">some detail info for 102 and 202</detail> 
    </update> 
</updates> 
' 


SELECT 
    r.value('@ref','NVARCHAR(250)') as 'Ref', --This is wrong, but you can probably see i'm wanting the value of Ref, eg 1000 for line 1, 1001 for line 2 
    t.r.query('./detail').value('.','nvarchar(max)') as 'Detail' 
FROM @XML.nodes('/updates/update') AS t(r); 
+0

ist Welche RDBMS verwenden Sie? –

+0

SQL-Server, Tags hinzugefügt Entschuldigung. Speziell muss mit 2008r2 arbeiten + –

Antwort

0

Sie benötigen detail Element in value Methode der Wert in Ref bekommen

SELECT 
     r.value('@Ref','NVARCHAR(250)') as 'Ref', -- It should be @Ref instead of @ref 
     r.query('.').value('.','nvarchar(max)') as 'Detail' 
FROM @XML.nodes('/updates/update/detail') AS t(r); 

Hinweis Attribut:Elements und attributes in xml ist Groß- und Kleinschreibung nicht @ref in Abfrage verwenden können, wenn xml attributeRef

+0

Danke! Ich hatte das mit @ref versucht und dachte nicht an Groß-/Kleinschreibung! –

+0

Ein Problem jedoch, die [1] macht es nur die erste Detailzeile zurückgeben? Sie hätten nicht von dem schlechten Beispiel, das ich gab, gewusst, aber es gibt mehrere Detailknoten in jedem Aktualisierungsknoten –

+0

@DaveLeech - aktualisiert ... –