Fragen Sie Elmahs XML -Feld ab
-
26-09-2019 - |
Frage
Die Stock Elmah_error -Tabelle verwendet ein NTEXT -Feld, um einen Fehlereintrag zu speichern. Ich fand das durch Hinzufügen eines Feldes vom Typ XML; Hinzufügen dieses neuen Feldes zur Anweisung des Sprocs, die das Feld bevölkert; Ich könnte Elmahs Ausgabe besser nutzen.
Jetzt möchte ich lernen, wie man bestimmte Elementwerte in diesem XML -Feld abfragt. Das Dokument ist strukturiert als:
<error [...]>
<serverVariables>
<item name="ALL_HTTP">
<value string="..." />
</item>
<item name="ALL_RAW">
<value string="..." />
</item>
.
.
.
</serverVariables>
</error>
Ich muss in der Lage sein, den Wert spezifischer Elemente darunter abfragen zu können.
Also schaue ich mir ein Beispiel der 15seconds.com Artikel:
SELECT MyXml.value('(/root/product[@id="304"]/name)[1]', 'nvarchar(30)')
Und versuche, diese Werte der Struktur meines Feldes zu karten - kann es aber nicht. Z.B
select top 10 RealXML.value('(/error/serverVariables[@id="REMOTE_HOST"]/name)[0]', 'nvarchar(30)')
wo remote_host formatiert ist:
<item name="REMOTE_HOST">
<value string="55.55.55.55" />
</item>
sehr geschätzt
Lösung
Das sollte funktionieren:
select top 10 RealXML.value('(/error/serverVariables/item[@name="REMOTE_HOST"]/value/@string)[1]', 'nvarchar(30)')
Unter Verwendung der folgenden getestet:
DECLARE @xml XML = '
<error>
<serverVariables>
<item name="ALL_HTTP">
<value string="..." />
</item>
<item name="ALL_RAW">
<value string="..." />
</item>
<item name="REMOTE_HOST">
<value string="55.55.55.55" />
</item>
</serverVariables>
</error>
'
SELECT @xml.value('(/error/serverVariables/item[@name="REMOTE_HOST"]/value/@string)[1]','nvarchar(30)')