Jak dostać się do węzła powyżej węzłów końcowych w XML?

0

Mam XML w postaci:

<mieszanie id="1">
  <miasto>Miasto</miasto>
  <adres>Ulica 100</adres>
  <kod>00-000</kod>
  <pokoj>
    <typ>kuchnia</typ>
    <pow>12</pow>
  </pokoj>
  <pokoj>
    <typ>sypialnia</typ>
    <pow>15</pow>
  </pokoj>
  <pokoj>
    <typ>sypialnia</typ>
    <pow>12</pow>
  </pokoj>
</mieszkanie>

Jeżeli chodzi o podstawowe dane (miasto, adres, kod) to dostaję się do nich poprzez:

XmlDoc.GetElementsByTagName("miasto").Item(id).InnerText;

Jak się dostać do węzła powyżej tj. węzłów <typ> i <pow>?
XML mogę edytować do własnych potrzeb, ale mieszkania mają różne pokoje, stąd taka proponowana konstrukcja XMLa.

0

ParentNode? Proponuje korzystanie z XDocument albo XmlSerializer zamiast XmlDocument

1

Spróbuj użyć XDocumen, XElement tak jak @krwq napisał.
Możesz mieć coś w stylu (oczywiście musisz to dostosować do swojego problemu, żeby resztę danych sobie też wyciągać :)):

    class Program
    {
        static void Main(string[] args)
        {
            string inputXml =
           @"
<mieszkanie id='1'>
   <miasto>Miasto</miasto>
   <adres>Ulica 100</adres>
   <kod>00-000</kod>
      <pokoj>
         <typ>kuchnia</typ>
         <pow>12</pow>
      </pokoj>
      <pokoj>
         <typ>sypialnia</typ>
         <pow>15</pow>
      </pokoj>
      <pokoj>
         <typ>sypialnia</typ>
         <pow>12</pow>
      </pokoj>
   </mieszkanie>
  ";
            XElement element = XElement.Parse(inputXml);

            var pokoje = from p in element.Descendants("pokoj") select p.Element("typ").Value;

            foreach(var pokoj in pokoje)
            {
                Console.WriteLine(pokoj);
            }

            Console.ReadKey();
        }
    }

BTW: masz literówkę w tagu otwierającym <mieszkanie>

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