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

时间:2011-08-25 16:47:07

标签: c# .net 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>

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();
    }
}

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

有没有办法改善这个?

3 个答案:

答案 0 :(得分:8)

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

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

var attributeValue = (string) attribute;

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

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

var attributeValue = (string) attribute;

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

答案 1 :(得分:1)

您可以在LINQ中使用XPath://othertag/element2/@attXDocument

答案 2 :(得分:0)

您可以使用xpath或linq。 Xml为此。请参阅w3.org或msdn  对于大小问题,你应该使用带有xpathnavigator的xpathdocument。