假设我有这个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)就会加载它
有没有办法改善这个?
答案 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/@att
或XDocument
。
答案 2 :(得分:0)
您可以使用xpath或linq。 Xml为此。请参阅w3.org或msdn 对于大小问题,你应该使用带有xpathnavigator的xpathdocument。