C# i Linq to XML - pobranie danych

0

Witam, mam taką strukturę XML

 
<poziom1>
  <poziom2.1 ... />
  <poziom2.2 ... >
    <poziom3 ...>
      <poziom4 ...>
        <poziom5 ... >
          <poziom6.1 ...>
            <poziom7.1>
              <poziom8 art3="..." />
            </poziom7.1>
            <poziom7.2 art4="..." art5="..." />
            <poziom7.3 art6="..." art7="..." art8="..." art9="..." art10="..." art11="..." />
          </poziom6.1>
          <poziom6.2 />
        </poziom5>
       </poziom4>
	</poziom3>
  </poziom2.2>
</poziom1>

Potrzebuje wyciągać dane o art i zapisywać do csv. Próbowałem różnych metod ale nigdy mi nic nie zwracają. Jak to wyciągnąć?

0

A z czym konkretnie masz problem czy atrybuty art mogą występować na dowolnym poziomie czy tylko na określonym?
Na 100% przyda ci się metoda SelectMany

0

Tylko na określonym. Próbuje takim kodem wyciągnąć:

 
var rezultat = from q in xmlDoc.Descendants("poziom7.2")//
                           select q.Atribute("art4").Value;
0

Jedno pytanie oryginalny xml tak wygląda, czy dodałeś tą numeracje sam od siebie?

Pomijając bezsensowność tego XML-a to zapytanie które wyciągnie wszystkie atrybuty danego poziomu wygląda następująco:

var result = from q in xmlDoc.Descendants("poziom7.3")
                      select q.Attributes().ToList();

         foreach (var xAttribute in result.SelectMany(x=>x))
         {
            Console.WriteLine(xAttribute.Value);
         }

A jeśli taki xml na prawdę musi być to bym zrobił tak:

         var attributes = new List<string>();
         using (var reader = XmlReader.Create("Dane.xml"))
         {
            while (reader.Read())
            {
                  if (!reader.Name.StartsWith("poziom7")) continue;
                  while (reader.MoveToNextAttribute())
                  {
                     attributes.Add(reader.Value);
                  }
            }
            reader.Close();
         }
         foreach (var attribute in attributes)
         {
            Console.WriteLine(attribute);
         }
0

Niestety, nie wiem dlaczego ale nie zwracał mi żadnych danych. Zrobiłem to według
http://msdn.microsoft.com/en-us/library/cc189056(v=vs.95).aspx
i działa;) Dzięki;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1