2011-08-25 68 views
2

假設我有這個XML文件:如何找到在.NET C#特定的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)。

有什麼辦法可以改善嗎?

+1

一個155Kb的XML文件不算大。 – casperOne

回答

8

我會使用LINQ到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好得多。

+0

謝謝!會嘗試它。 – Flob

0

您可以使用xpath或linq來。 Xml爲此。請參閱w3.org或msdn 而對於大小問題,您應該使用xpathdocument和xpathnavigator。

1

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

相關問題