【问题标题】:Query ELMAH's XML field查询 ELMAH 的 XML 字段
【发布时间】:2010-11-18 12:25:03
【问题描述】:

库存 ELMAH_Error 表使用 nText 字段来存储错误条目。我发现通过添加 XML 类型的字段;然后将此新字段添加到填充该字段的 SPROC 的 INSERT 语句中;我可以更好地利用 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>

非常感谢

【问题讨论】:

    标签: sql-server elmah xpath sqlxml


    【解决方案1】:

    这应该可行:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多