Запрос XML-поля ELMAH - PullRequest
       31

Запрос XML-поля ELMAH

3 голосов
/ 18 ноября 2010

Стандартная таблица ELMAH_Error использует поле nText для хранения записи об ошибке. Я нашел это, добавив поле типа XML; затем добавление этого нового поля в оператор INSERT SPROC, который заполняет поле; я мог бы лучше использовать выход ELMAH.

Теперь я хотел бы узнать, как запрашивать значения определенных элементов в этом поле XML. Документ имеет следующую структуру:

<error [...]>
  <serverVariables>
    <item name="ALL_HTTP">
      <value string="..." />
    </item>
    <item name="ALL_RAW">
      <value string="..." />
    </item>
    .
    .
    .
  </serverVariables>
</error>

Мне нужно иметь возможность запрашивать значение определенных элементов ниже.

Итак, я смотрю на пример из 15seconds.com статьи:

SELECT MyXml.value('(/root/product[@id="304"]/name)[1]', 'nvarchar(30)')

и я пытаюсь сопоставить эти значения со структурой моего поля, но не могу. Э.Г.

select top 10 RealXML.value('(/error/serverVariables[@id="REMOTE_HOST"]/name)[0]', 'nvarchar(30)') 

где REMOTE_HOST отформатирован:

<item name="REMOTE_HOST">
  <value string="55.55.55.55" />
</item>

высоко ценится

1 Ответ

4 голосов
/ 18 ноября 2010

Это должно работать:

select top 10 RealXML.value('(/error/serverVariables/item[@name="REMOTE_HOST"]/value/@string)[1]', 'nvarchar(30)') 

Протестировано с использованием следующего:

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)') 
...