Temat: [C#] Parsowanie XML-a do tabeli

Witam,

mam dokument XML:

<dane>
<uczen>
<id>1</id>
<imie>Jan</imie>
<nazwisko>Nowak</nazwisko>
<ksiazki>
<ksiazka>
<tytul>Tytul1</tytul>
<autor>Autor1</autor>
</ksiazka>
<ksiazka>
<tytul>Tytul2</tytul>
<autor>Autor2</autor>
</ksiazka>
</ksiazki>
</uczen>
<uczen>
<id>2</id>
<imie>Stanisław</imie>
<nazwisko>Kowalski</nazwisko>
<ksiazki>
<ksiazka>
<tytul>Tytul3</tytul>
<autor>Autor3</autor>
</ksiazka>
</ksiazki>
</uczen>
</dane>



Do tabeli (DataTable) chcę wstawiać książki przypisane uczniom. W wyniku powinnam otrzymać:

id tytul autor
1 Tytul1 Autor1
1 Tytul2 Autor2
2 Tytul3 Autor3

Jak przeglądać dokument XML w głąb, by dane o książce były powiązane z danym uczniem (id)?

Dane o uczniach i o książkach pobieram za pomocą GetElementsByTagName(String) lub SelectNodes(String). Odbywa się to w dwóch pętlach for (jedna iteruje to uczniach, druga po książkach) i w wyniku otrzymuję 6.wierszy, zamiast 3-ch (2-ch uczniów * 3-y książki = 6).

(Dla powyższego przykładu nie mam kodu w C#, powyższy dokument XML jest tylko przekładem dla zobrazowania zagadnienia).
Będę wdzięczna za podpowiedzi.

konto usunięte

Temat: [C#] Parsowanie XML-a do tabeli

pierwszy przykład z brzegu http://www.intertech.com/Blog/query-an-xml-document-us...

Temat: [C#] Parsowanie XML-a do tabeli

Dziękuję za odpowiedź.

Cześć rozwiązania miałam już zaimplementowaną korzystając z XmlDocument (w przesłanym linku jest mowa o XDocument, gdzie są inne metody) toteż nie chciałam już tego zmieniać. Zastosowałam XmlNode, XmlNodeList.
Dla wcześniejszego przykładu:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Data;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string xml = "<dane>"+
"<uczen>" +
"<id>1</id>" +
"<imie>Jan</imie>" +
"<nazwisko>Nowak</nazwisko>" +
"<ksiazki>"+
"<ksiazka>"+
"<tytul>Tytul1</tytul>"+
"<autor>Autor1</autor>"+
"</ksiazka>"+
"<ksiazka>" +
"<tytul>Tytul2</tytul>" +
"<autor>Autor2</autor>" +
"</ksiazka>" +
"</ksiazki>" +
"</uczen>" +
"<uczen>" +
"<id>2</id>" +
"<imie>Stanisław</imie>" +
"<nazwisko>Kowalski</nazwisko>" +
"<ksiazki>" +
"<ksiazka>" +
"<tytul>Tytul3</tytul>" +
"<autor>Autor3</autor>" +
"</ksiazka>" +
"</ksiazki>" +
"</uczen>" +
"</dane>";

string uczenId = "", tytul = "", autor = "";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
XmlNodeList uczenLista = xmlDoc.GetElementsByTagName("uczen");

for (int i = 0; i < uczenLista.Count; i++ )
{
uczenId = xmlDoc.GetElementsByTagName("id")[i].InnerText;
XmlNode wezelKsiazek = xmlDoc.GetElementsByTagName("ksiazki")[i];
XmlNodeList listaKsiazek = wezelKsiazek.ChildNodes;

foreach(XmlNode ksiazka in listaKsiazek)
{
tytul = ksiazka["tytul"].InnerText;
autor = ksiazka["autor"].InnerText;
Console.WriteLine(String.Format("Uczen o id = {0} ma na koncie ksiazke: {1}, {2}", uczenId, tytul, autor));
}
}
Console.ReadLine();
}
}
}

Podobne tematy


Następna dyskusja:

Parsowanie HTML C#




Wyślij zaproszenie do