2013-04-16 170 views
2

我糊塗了......沒有什麼是在我的腦海了......我需要從這種xmldocument讀取XML屬性

<party_list> 
    <party currency="BAM" id="330-159210014235851" /> 
    <party currency="EUR" id="330-153990008540078" /> 
</party_list> 

讀取每個屬性我有這樣的...但無濟於事

XDocument doc = XDocument.Load(@"e:\input\partylist.xml"); 
XElement root1 = doc.Element("party_list"); 
foreach (XElement element in root1.Elements()) 
{ 
    MessageBox.Show(element.Element("party").Value); 
} 
+0

喜試試現在的解決方案是工作....可能會幫助你.. –

回答

0

你可以試試這個嗎?

XDocument doc = XDocument.Load(@"e:\input\partylist.xml"); 
foreach (var partyList in doc.Descendants("party")) 
{ 
    string currency= partyList .Attribute("currency").Value; 
    string id= partyList .Attribute("id").Value; 
} 
+0

請注意,'NullReferenceException'可能位於'Attribute(「currency」)。Value'。我也沒有訪問'Value'屬性,直到我看到lazyberezovsky的答案轉換爲'string'。也許這是拋出異常的理想行爲,但通常情況並非如此,因爲'xml'通常來自外部來源。 –

+0

doc.Descendants(「party_list」)應該是doc.Descendants(「party」) –

+0

對不起你是對的 –

0
XmlNodeList elemList = doc.GetElementsByTagName(...); 
    for (int i = 0; i < elemList.Count; i++) 
    { 
     string attrVal = elemList[i].Attributes["id"].Value; 
    } 

試試上面的代碼。

+0

的getElementsByTagName度外我錯誤 – Arnes

+0

有你在它把適當的標籤名稱? – Freelancer

+0

是的。 「party_list」 ??? – Arnes

2

更換

MessageBox.Show(element.Element("party").Value); 

MessageBox.Show((string)element.Attribute["currency"]); 

,因爲你的元素已經party元素。


全碼:

XDocument doc = XDocument.Load(@"e:\input\partylist.xml"); 
foreach (var party in doc.Descendants("party")) 
    foreach (var attr in party.Attributes()) 
     MessageBox.Show(attr.ToString()); 

該代碼使用的XAttribute重寫ToString()方法,它返回屬性名與它的值是這樣的:

currency="BAM" 

你可以,如果你只使用值,需要:MessageBox.Show(attr.Value);

0

輸入XML文件

<?xml version='1.0' encoding='utf-16'?> 
<party_list> 
    <party currency='BAM' id='330-159210014235851' /> 
    <party currency='EUR' id='330-153990008540078' /> 
</party_list> 

C#代碼來獲得attributre值

 XDocument doc = XDocument.Load(@"e:\input\partylist.xml"); 
     var eles = doc.Element("party_list").Elements("party"); 

     foreach (XElement ele in eles) 
     { 
      Console.WriteLine (ele.Attribute("currency").Value); 
      Console.WriteLine(ele.Attribute("id").Value); 

     } 
     Console.ReadLine(); 
+0

不工作... foreach循環顯示錯誤:( – Arnes

+0

@Arnes - 哪個錯誤.... –

+0

foreach不能對XElement類型的變量進行操作... – Arnes

0
string body = @"<?xml version='1.0' encoding='utf-16'?><party_list> 
        <party currency='BAM' id='330-159210014235851' /> 
        <party currency='EUR' id='330-153990008540078' /> 
       </party_list>"; 
XmlDocument bodyDoc = new XmlDocument(); 
bodyDoc.LoadXml(body); 
XmlNodeList xnList = bodyDoc.SelectNodes("/party_list/party"); 
foreach (XmlNode item in xnList) 
{ 
    var id = item.Attributes["id"].Value; 
    var currency = item.Attributes["currency"].Value; 
} 
0

另一種選擇:

XElement xml = 
    XElement.Parse (@"<party_list> 
         <party currency='BAM' id='330-159210014235851' /> 
         <party currency='EUR' id='330-153990008540078' /> 
        </party_list>"); 

xml.Elements() 
    .SelectMany(element => element.Attributes().Select(attrib => attrib.Value)) 
     .ToList() 
     .ForEach(text => MessageBox.Show(text)); 
0

試這

XDocument doc = XDpcument.Load("your xml location"); 

var parties = from p in doc.Descendants("party") 
       select new 
       { 
         currency = p.Attribute("currency").Value; 
         Id =  p. Attribute("id").Value; 
       }