2014-01-08 42 views
-1

我寫了讀取我的XML文件的函數。我可以寫更通用和更短嗎?C#XmlReader - 更短的函數

我的功能:

XmlTextReader reader = new XmlTextReader ("../../database.xml"); 
    reader.ReadStartElement("eshop"); 
    while (reader.Read()) { 
     if (reader.IsStartElement()) { 

      reader.ReadStartElement("item"); 
      reader.ReadStartElement ("id"); 
      string elem = reader.ReadString(); 
      reader.ReadEndElement(); 
      reader.ReadStartElement ("name"); 
      string name = reader.ReadString(); 
      reader.ReadEndElement(); 
      reader.ReadStartElement ("cost"); 
      string cost = reader.ReadString(); 
      reader.ReadEndElement(); 

      Console.WriteLine (elem + " - name : " + name + " - cost: " + cost); 
     } 

    } 

示例XML:

<?xml version="1.0" encoding="UTF-8" ?> 
<eshop> 
    <item> 
     <id>1</id> 
     <name>some product 1</name> 
     <cost>89.90</cost> 
    </item> 
    <item> 
     <id>2</id> 
     <name>some product 2</name> 
     <cost>95.00</cost> 
    </item> 
    <item> 
     <id>3</id> 
     <name>some product 3</name> 
     <cost>12.00</cost> 
    </item> 
</eshop> 

我不知道如何使這個功能更小,如果我將加入新的元素。現在我必須添加到這個功能,如果我想升級我的XML文件到其他元素:

reader.ReadStartElement ("secondelement"); 
    string secondelement = reader.ReadString(); 
    reader.ReadEndElement(); 

請幫助。謝謝。

+5

此問題似乎是偏離主題b因爲它是關於重構有效代碼示例的。考慮在Code Review上發佈。 – Servy

回答

1

讀取XML的最簡單的方法是不使用的XmlReader,但使用LINQ到XML(使用System.Xml.Linq):

var d = XDocument.Load("../../database.xml"); 

foreach (var e in d.Root.Elements("item")) 
{ 
    Console.WriteLine(
     (string)e.Element("id") + 
     " - name : " + (string)e.Element("name") + 
     " - cost: " + (string)e.Element("cost")); 
} 
0

是的,你可以使用LINQ to XML:

XDocument xDoc = XDocument.Load("../../database.xml"); 

foreach(var item in xDoc.Descendants("item")) 
{ 
    string id= (string)item.Element("id"); 
    string name= (string)item.Element("name"); 
    string cost= (string)item.Element("cost"); 
    Console.WriteLine("{0} name - {1} - cost {2}",id,name,cost); 
} 
+0

這很棒 - 就像在PHP中一樣 - 更易讀易記。謝謝你,謝謝Mike的幫助。現在是研究LINQ的時候了:-) – Gregory