如何在.NET C#中查找特定的XML标记

Flo*_*lob 2 .net c# xml

假设我有这个XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<config>
  <atag>
    <element1 att="value" />
    <element2 att="othervalue"/>
  </atag>
  <othertag>
    <element1 att="value" />
    <element2 att="othervalue"/>
  </othertag>
</config>
Run Code Online (Sandbox Code Playgroud)

att<element2>下面访问属性的最佳方法是什么<othertag>.

我目前正在使用这个:

XmlDocument doc = new XmlDocument();
String srR = SPContext.Current.Web.Url.ToString() + "config.xml";
WebRequest refF = WebRequest.Create(srR);
refF.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse resFF = (HttpWebResponse)refF.GetResponse();
doc.Load(resFF.GetResponseStream());
XmlNodeList nodes = doc.GetElementsByTagName("othertag");

XmlNode ParentNodes = nodes[0];
foreach (XmlNode ParentNode in ParentNodes.ChildNodes) 
{
    if (ParentNode.LocalName == "element2")
    {
        string value = ParentNode.Attributes["att"].InnerText.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

它正在完成这项工作,但我认为它太重了,特别是我在一个ashx文件上使用它,每当我在下拉列表中更改一个值并且XML文件非常大(大约~155kb)时就会加载它.

有没有办法改善这个?

Jon*_*eet 8

我会使用LINQ to XML - 像这样:

XDocument doc = XDocument.Load(...);
var attribute = doc.Element("config")
                   .Element("othervalue")
                   .Element("element2")
                   .Attribute("att");

var attributeValue = (string) attribute;
Run Code Online (Sandbox Code Playgroud)

请注意,如果缺少任何元素,这将失败 - 对于任何失败,最后将返回null的替代方法是:

var attribute = doc.Elements("config")
                   .Elements("othervalue")
                   .Elements("element2")
                   .Attributes("att")
                   .FirstOrDefault();

var attributeValue = (string) attribute;
Run Code Online (Sandbox Code Playgroud)

如果您是LINQ to XML的新手,您应该阅读完整的教程或类似内容,而不仅仅是使用上面的代码.虽然这是一个神话般的API - 比...更好XmlDocument.