2012-06-27 40 views
5

Tôi đã theo tập tin XML, tôi muốn biết cách tốt nhất để đọc tập tin XMLCách đọc tệp XML trong C#?

<MyFile> 
    <Companies> 
    <Company>123</Company> 
    <Company>456</Company> 
    <Company>789</Company> 
    </Companies> 
</MyFile> 

Là một đầu ra tôi cần phải tập hợp các giá trị như "123.456.789" hoặc nó có thể là mảng các string []

Chúng ta có thể sử dụng LINQ to xml không? Làm sao?

+2

Có sử dụng LINQ. Có 10000000+ hướng dẫn về Linq. Có thể bạn có thể bắt đầu với điều này: http://www.codeproject.com/Articles/19154/Understanding-LINQ-C – sabisabi

+0

bản sao có thể có của [LINQ to read XML] (http://stackoverflow.com/questions/670563/linq -to-đọc-xml) –

Trả lời

3
var [email protected]"<MyFile> 
    <Companies> 
    <Company>123</Company> 
    <Company>456</Company> 
    <Company>789</Company> 
    </Companies> 
</MyFile>"; 

var xDoc = XDocument.Parse(xmlStr); 
var companyIds = xDoc.Descendants("Company").Select(e => (int)e); 
+0

OP muốn một mảng chuỗi –

+0

@ChuckSavage Đọc kỹ ... chúng không thực sự rõ ràng về yêu cầu đó. Bộ sưu tập của * giá trị * hoặc mảng chuỗi. Tôi thực hiện yêu cầu đó theo các quy tắc của logic boolean. Nó sẽ không mất một thiên tài để phá vỡ câu trả lời này để sản xuất dây thay vì ints. Khó có giá trị thấp hơn ... – spender

+0

OP được yêu cầu "..." hoặc chuỗi []. Nếu bạn muốn phiếu bầu trở lại, tôi không thể thay đổi phiếu giảm giá cho đến khi câu trả lời đã được chỉnh sửa. Cả bạn và tôi đều biết, nó chỉ cần một '.ToArray()' ở cuối câu lệnh của bạn để làm cho nó thành một mảng, nhưng đó là những gì mà OP yêu cầu. Như vậy, câu trả lời của bạn là một 'IEnumerable 'không giống như một' chuỗi [] '. –

11
var xdoc = XDocument.Load(PATH_TO_FILE); 
var companies = xdoc.Descendants("Company").Select(c => (string)c).ToArray(); 

này sẽ cung cấp cho bạn một string[].

6

Sử dụng LINQ to XML, Bao gồm using System.Xml.Linq;

XDocument xmlDoc = XDocument.Load("yourfile.xml"); 
    var test = xmlDoc.Descendants("Companies").Elements("Company").Select(r => r.Value).ToArray(); 
    string result = string.Join(",", test); 

Output sẽ là:

123.456.789

+1

Bạn chỉ có thể sử dụng '.Descendants (" Company ")' thay vì '.Descendants (" Companies "). Elements (" Company ")' –

+1

@ChuckSavage, tôi chỉ muốn đưa ra một ý tưởng, và câu lệnh trên cũng hoạt động nơi bạn muốn tránh yếu tố công ty lồng nhau như vậy: công ty con Habib

+0

Yep - tôi đã ở một nơi quan trọng ngày hôm qua - xin lỗi vì điều đó. –

4

Trong bộ dữ liệu bạn có thể đọc file xml

Sau đây là dòng mã để đọc tệp XML trong DataSet

DataSet dsMenu = new DataSet(); //Create Dataset Object 

dsMenu.ReadXml("XMLFILENAME.XML"); // Read XML file in Dataset 

DataTable dtXMLFILE// Create DatyaTable object 

dtXMLFILE= dsMenu.Tables[0]; // Store XML Data in Data Table 
+0

+1 OP muốn có câu trả lời LINQ, nhưng dù sao thì tốt đẹp –

2

Trước đây, tôi đã sử dụng XmlReader và không gặp khó khăn gì.

MSDN Tài liệu: http://msdn.microsoft.com/en-us/library/system.xml.xmlreader(v=vs.110).aspx

Nó rất đơn giản và các tài liệu được khá tốt bằng văn bản. Một cuộc biểu tình nhanh chóng như thế nào để sử dụng nó:

XmlReader reader = XmlReader.Create(targetFile); 

while (reader.Read()) 
{ 
    switch (reader.NodeType) 
    { 
     case XmlNodeType.Element: 
      if (reader.Name.Equals("Company") 
      { 
       // Read the XML Node's attributes and add to string 
      } 
      break; 
    } 
} 
3
string pathToXmlFile = @"C:\test.xml"; 
XElement patternDoc = XElement.Load(pathToXmlFile); 
List<string> values = new List<string>(); 
foreach (var element in patternDoc.Elements("Companies").Elements("Company")) 
{ 
    values.Add(element.Value); 
}