如何在.net c#中找到一个特定的XML标签

本文关键字:一个 标签 XML net | 更新日期: 2023-09-27 18:06:52

假设我有这样一个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>

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

我正在使用这个:

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

有什么方法可以改善这一点吗?

如何在.net c#中找到一个特定的XML标签

我会使用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好多了。

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

您可以使用xpath或linq来。Xml。参见w3.org或msdn对于大小问题,您应该使用xpathdocument和xpathnavigator。