我试着学习更多关于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
我试图帮助我。
答案 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);
}
然后只输出要显示它们的列表内容(在我估算的另一个文本框中)。