1

前体

您实际上并不需要知道但可能有助于解决问题的一点是,我正在 LINQPad 中编写一系列 C# 语句,它从 ELMAH(错误日志系统)数据库中获取记录集合,提取每个记录的 XML (AllXml) 字段,并将每个提取加载到 XmlDocument 中。好的,这看起来相当容易,但现在我需要遍历每个文档并从中获取特定值。

XML 结构示例

注意:我在这里删除了所有潜在的机密信息...

<error type="System.Exception" time="2013-06-11T17:27:28.0122874Z">
    <item name="PATH_INFO">
      <value string="/foo/bar/thisIsTheValueIWant.aspx" />
    </item>
    <item name="PATH_TRANSLATED">
      <value string="C:\site\foo\bar\thisIsPotentiallyAnotherValueIMightWant.aspx" />
    </item>
    <item name="QUERY_STRING">
      <value string="meh" />
    </item>
</error>

考虑到这个 XML 作为一个字符串存在,我已经像这样加载它:

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlString);

问题

获取节点的值并不太难,但是在这种情况下,该值是作为节点的属性存储的,我不知道如何遍历它!

我基本上需要用 , 获取value嵌套在item节点中的节点name"PATH_INFO"然后获取"string"属性的值。

我怎样才能做到这一点?

4

2 回答 2

3

[一旦你有了一件XmlNode物品,你可以索取它的Attributes收藏,并通过名字得到你想要的那件。

一个例子:

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlString);
XmlNode itemNode = doc.SelectSingleNode("/error/item[@name = 'PATH_INFO']");
if (itemNode != null)
{
    XmlNode value = itemNode.SelectSingleNode("value");
    String valueString = value.Attributes["string"].Value;
}
于 2013-06-13T15:38:00.153 回答
1
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(xmlString);
        var value = doc.SelectSingleNode("error/item[@name='PATH_INFO']/value/@string").Value;
于 2013-06-13T15:47:33.327 回答