Wyciąganie poszczególnych elementów z XML

0

Witam. Od dłuższego czasu borykam się z XML-em. Mój problem polega na tym że mając następującą strukturę:

<Miasta>
     <Miasto>
           <NazwaMiasta>Warszawa</NazwaMiasta>
           <Kraj>Polska></Kraj>
           <Wojewodztwo>mazowieckie</Wojewodztwo>
                <Powiaty>
                    <Powiat>
                        <NazwaPowiatu>grójecki</NazwaPowiatu>
                    </Powiat>
                    <Powiat>
                         <NazwaPowiatu>otwocki</NazwaPowiatu>
                    </Powiat>
                </Powiaty>
          </Miasto>
          <Miasto>
                <NazwaMiasta>Kraków</NazwaMiasta>
                <Kraj>Polska></Kraj>
                <Wojewodztwo>małopolskie</Wojewodztwo>
                     <Powiaty>
                         <Powiat>
                              <NazwaPowiatu>brzeski</NazwaPowiatu>
                         </Powiat>
                         <Powiat>
                             <NazwaPowiatu>chrzanowski</NazwaPowiatu>
                        </Powiat>
                      </Powiaty>
          </Miasto>
</Miasta>

Muszę wyciągnąć do treeview nazwy Miast jako Nodesi nazwy powiatów jako ChildNodes.
Praktycznie nie wiem jak się za to zabrać. Próbowałem robić to m.in. po GetElementByTagName ale to nie skutkowało. Będę bardzo wdzięczny za pomoc. Pozdrawiam

0

Używasz XMLDocument?

A może SelectNodes() byłoby lepsze? Możesz w argumencie podać coś a la ścieżka i wzorzec węzłów, doczytaj: http://msdn.microsoft.com/en-us/library/hcebdtae.aspx

0

foreach (XmlNode xmlCityNode in xmlDocument["Miasta"].ChildNodes)
{
TreeNode treeCityNode = treeView.Nodes.Add(xmlCityNode["NazwaMiasta"].InnerText);
foreach (XmlNode xmlCountyNode in xmlCityNode["Powiaty"].ChildNodes)
{
treeCityNode.Nodes.Add(xmlCountyNode["NazwaPowiatu"].InnerText);
}
}



ps. kto przygotował Ci ten XML? Praktycznie wszystko jest w nim bez sensu.
0

Dzięki za pomoc. O to mi chodziło.
To zadanie to praca domowa z Xml'a.
Mam jeszcze jedno pytanie. Próbowałem wyciągnąć same powiaty należące do Krakowa, tzn. wybieram z checkboxa Kraków i dostaję w odpowiedzi listę powiatów. Próbowałem dodwać index do ChildNodes, np.
ChildNodes[0], ale wyskakuje błąd.
Czy można to wykonać "twoim" sposobem, czy musze tutaj użyć XPath ?
z góry dzięki :)

0

Można "moim", ale będzie więcej pętli i warunków. Właśnie dla takich przypadków powstał już XPath.
Dodałem na formę FlowLayoutPanel flowLayoutPanel, który będzie trzymał te checkboxy do filtrowania.

XmlDocument xmlDocument = new XmlDocument();
public void Initialize()
{  
    xmlDocument.LoadXml(...);
    foreach (XmlNode xmlCityNode in xmlDocument["Miasta"].ChildNodes)
    {
        TreeNode treeCityNode = treeView.Nodes.Add(xmlCityNode["NazwaMiasta"].InnerText);
        treeCityNode.Name = treeCityNode.Text;
        foreach (XmlNode xmlCountyNode in xmlCityNode["Powiaty"].ChildNodes)
        {
            treeCityNode.Nodes.Add(xmlCountyNode["NazwaPowiatu"].InnerText);
        }
        CheckBox checkBox = new CheckBox();
        checkBox.Text = xmlCityNode["NazwaMiasta"].InnerText;
        checkBox.Checked = true;
        checkBox.CheckedChanged += new EventHandler(checkBox_CheckedChanged);
        flowLayoutPanel.Controls.Add(checkBox);
    }
}

private void checkBox_CheckedChanged(object sender, EventArgs e)
{
    CheckBox checkBox = (CheckBox)sender;
    if (checkBox.Checked)
        AddCityNode(checkBox.Text);
    else
        DeleteCityNode(checkBox.Text);
}

private void DeleteCityNode(string cityname)
{
    treeView.Nodes[cityname].Remove();
}

private void AddCityNode(string cityname)
{
    TreeNode treeCityNode = treeView.Nodes.Add(cityname);
    treeCityNode.Name = treeCityNode.Text;
    XmlNodeList xmlCountyNodes = xmlDocument.SelectNodes(
        "/Miasta/Miasto[NazwaMiasta=\"" + cityname + "\"]/Powiaty/Powiat/NazwaPowiatu");
    foreach (XmlNode xmlCountyNameNode in xmlCountyNodes)
    {
        treeCityNode.Nodes.Add(xmlCountyNameNode.InnerText);
    }
}

ps. O jeeeju, piąta. A na 8:30 mam mieć niby zajęcia na PJWSTK, haah. Przygotowywacze do matury. Dacie wiarę?

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