XML节点 - 搜索1节点获取其子节点

时间:2012-01-31 19:59:31

标签: c# xml nodes

我试着学习更多关于xml的知识。 在我的应用程序中,我有1个按钮,1个用于搜索头节点的文本框,另一个用于获取此头节点的子节点。

示例:

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

现在如果我在标题之后的第一个文本框中搜索 - &gt; So What?,如何获取So what?的子节点?

子节点将是:

Pop
Pink
Max Martin
2008

我试图帮助我。

3 个答案:

答案 0 :(得分:0)

我认为你对XML有点困惑。元素节点titel只有一个子节点,一个值为“So What?”的文本节点。 gattung等元素节点是titel的兄弟姐妹,而不是孩子!

答案 1 :(得分:0)

您可以使用Linq to XML 或者如果你感觉活泼XML Serialization 不建议您尝试使用字符串拆分&amp;正则表达式等。

编辑:使用上述技术可以缓解儿童与兄弟之间的语法问题。

编辑:使用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();
        }
    }
}

答案 2 :(得分:0)

我认为这里有一些关于“子节点”定义的混淆。在给定的示例中,<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);
}

然后只输出要显示它们的列表内容(在我估算的另一个文本框中)。