查询ELMAH的XML领域
-
26-09-2019 - |
题
在库存ELMAH_Error表使用一个n文字字段来存储错误条目。我发现,通过添加XML类型的字段;然后添加这一新领域,以用于填充字段中存储过程的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)')
,我试图映射这些值来我场的结构 - 但不能。 E.g。
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>
非常感谢
解决方案
此应该工作:
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)')
不隶属于 StackOverflow