Узлы XML - Поиск 1 Узел Получение дочерних узлов - PullRequest
0 голосов
/ 31 января 2012

Я пытался узнать что-то еще о XML. В моем приложении у меня есть 1 кнопка, 1 текстовое поле для поиска головных узлов и еще одно, чтобы получить дочерние узлы этого головного узла.

Пример:

<root>
 <werk>
  <titel>So What?</titel>
  <gattung>Pop</gattung>
  <interpret>Pink</interpret>
  <komponist>Max Martin</komponist>
  <entstehungsjahr>2008</entstehungsjahr>
 </werk>
</root>

Теперь, если я ищу в своем первом текстовом поле после заголовка -> So What?, как я могу получить дочерние узлы So what??

Дочерние узлы будут:

Pop
Pink
Max Martin
2008

Спасибо за попытку помочь мне.

Ответы [ 3 ]

0 голосов
/ 01 февраля 2012

Вы можете использовать Linq to XML или если вы чувствуете себя резвым Сериализация XML НЕ рекомендуется пытаться делать это с помощью разбиения строк и регулярных выражений и т. Д.

edit: использование вышеупомянутых технологий должно смягчить некоторые грамматические проблемы, такие как «ребенок против родного брата».

edit: добавление примера кода с использованием linq в xml

using System;
using System.Xml.Linq;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var doc = XDocument.Parse(@"<root>
 <werk>
  <titel>So What?</titel>
  <gattung>Pop</gattung>
  <interpret>Pink</interpret>
  <komponist>Max Martin</komponist>
  <entstehungsjahr>2008</entstehungsjahr>
 </werk>
</root>");
            var elementsAfterTitel = doc.Element("root").Element("werk").Element("titel").ElementsAfterSelf();
            foreach (var element in elementsAfterTitel)
            {
                Console.WriteLine(element.ToString());
            }
            Console.ReadLine();
        }
    }
}
0 голосов
/ 24 сентября 2013

Я думаю, что здесь есть небольшая путаница в определении «дочернего узла». В данном примере <titel>, <gattung>, <interpret>, <komponist> и <entstehungsjahr> являются дочерними узлами <werk>. Из того, что я собрал, учитывая заголовок, вы хотите получить значения, которые содержат другие теги. Вот один из способов сделать это:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"path\to\file.xml");

List<string> values = new List<string>(); // Create a new list

// Select the 'werk' node whose title is 'So what?'
XmlNode werk = xmlDoc.SelectSingleNode("/root/werk[titel='So what?']");
// If you're getting the title from a textbox, then obviously you won't hardcode 
// 'So what?' here.

// Add the value of each child node to the list
foreach (XmlNode node in werk.ChildNodes)
{
    values.Add(node.InnerText);
}

Затем просто выведите содержимое списка, в котором вы хотите их отобразить (в другом текстовом поле, которое я считаю).

0 голосов
/ 01 февраля 2012

Я думаю, вы немного запутались в XML. Элемент-узел titel имеет ровно один дочерний узел, текстовый узел со значением «И что?». Узлы элементов gattung и т. Д. - это братья и сестры titel, а не дети!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...