2012-06-27 13 views
5

Mam następujący plik XML, chcę wiedzieć, najlepszym sposobem, aby odczytać ten plik XMLJak odczytać plik XML w języku C#?

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

Jako wyjście muszę zbiór wartości jak „123,456,789” lub może to być tablica string []

Czy możemy użyć Linq do xml? W jaki sposób?

+2

Tak używać LINQ. Istnieje 10000000+ samouczków na temat Linq. Może zaczniesz od tego: http://www.codeproject.com/Articles/19154/Understanding-LINQ-C – sabisabi

+0

możliwy duplikat [LINQ do odczytu XML] (http://stackoverflow.com/questions/670563/linq -to-read-xml) –

Odpowiedz

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 chce mieć tablicę ciągów –

+0

@ChuckSavage Przeczytaj uważnie ... w rzeczywistości nie mówili o tym wymogu. Zbiór * wartości * lub tablica ciągów znaków. Spełniam ten wymóg regułami logiki boolowskiej. Nie trzeba geniusza, aby obalić tę odpowiedź, aby stworzyć ciągi zamiast ints. Prawie nie warte pochwały ... – spender

+0

OP zażądał "..." lub napis []. Jeśli chcesz powtórzyć głosowanie, nie mogę zmienić decyzji, dopóki odpowiedź nie zostanie zmieniona. Oboje wiemy, że po prostu wymaga '.ToArray()' na końcu twojego oświadczenia, aby uczynić z niego tablicę, ale to jest to, o co prosił OP. Tak jak jest, twoja odpowiedź brzmi "IEnumerable ", która nie jest taka sama jak "string []". –

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

To daje string[].

6

używać LINQ do XML, Dołącz 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); 

wyjściowy będzie:

123.456.789

+1

Możesz po prostu użyć '.Różnice (" Firma ")' zamiast '.Ryski (" Firmy "). Elementy (" Firma ")' –

+1

@ ChuckSavage, chciałem tylko dać pomysł, a powyższe stwierdzenie również działa gdzie chcesz uniknąć zagnieżdżonego elementu firmy takie, że: firma dziecko Habib

+0

Tak - byłem w krytycznym miejscu wczoraj - przepraszam za to. –

4

W zbiorze można odczytać pliku xml

Poniżej przedstawiono linie kod do odczytu pliku XML w 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 chce Linq odpowiedź, ale miły przykład mimo to –

2

W przeszłości użyłem XmlReader i nie miałem żadnych problemów.

MSDN Dokumentacja: http://msdn.microsoft.com/en-us/library/system.xml.xmlreader(v=vs.110).aspx

To jest bardzo proste, a dokumentacja jest bardzo dobrze napisany. Szybkie demonstracja jak go używać:

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); 
} 
Powiązane problemy