如何在.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)。
有什么方法可以改善这一点吗?
我会使用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/@att
或XDocument
。
您可以使用xpath或linq来。Xml。参见w3.org或msdn对于大小问题,您应该使用xpathdocument和xpathnavigator。