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

War es hilfreich?

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)') 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top