假设我有以下xml结构
<Books>
<Book >
<property name="isbn" value="1"/>
<property name="title" value="XML"/>
<Book >
<property name="isbn" value="11"/>
<property name="title" value="XML_C++"/>
</Book>
</Book>
<Book >
<property name="isbn" value="2"/>
<property name="title" value="C#"/>
</Book>
</Books>
,输出应如下所示:
0- Books
01- Book_isbn=1
011-Book_isbn=11
02-Book_isbn=2
因为我们可以看到结果类似于具有有序子级别的树 我需要一个代码来提供上面的字符串,其中包含xml节点作为树 每个父母首先拥有自己的孩子,然后是第二个父母及其子女等等.... 我的代码:
XmlDocument xdoc = new XmlDocument();
xdoc.Load(@"C:\myxml.xml");
XmlNodeList dataNodes1 = xdoc.GetElementsByTagName("Books");
// the parent here
Console.WriteLine("0" + dataNodes1[0].Attributes[0].Name );
// all children
foreach (XmlElement el in dataNodes1)
{
XmlNodeList nn = el.ChildNodes;
int level=0;
foreach (XmlElement eee in nn)
{
if (eee.Name.ToLower() == "Book")
{
Console.WriteLine(level + " -" + eee.Name + " " + " - " + eee.Attributes[0].Name + " _" + eee.Attributes[0].Value); // attribute 0 means isbn
}
level++;
}
}
// I got the result not ordered
// I got something like this
/*
0 Books
1 Book_isbn=1
2 Book_isbn=2
3 Book_isbn=11
*/
所以有人可以给我一个提示,我怎样才能将这些元素显示为一个群体,每个群体都必须拥有自己的孩子......!
答案 0 :(得分:0)
使用递归函数迭代xml树子项,并在每次调用时更新深层次。一个简单的算法可以让你开始:
ProcessChild(XmlElement root, int level)
{
// do your printing here
Console.WriteLine(level + root.Name);
foreach(var child in root.ChildNodes)
{
ProcessChild(child, level + 1);
}
}
开始处理所有节点:
ProcessChild(booksRoot, 0)
答案 1 :(得分:-1)
XmlDocument doc = new XmlDocument();
doc.Load("yourxmlfile");
XmlNode root = doc.DocumentElement;
var result = root.SelectNodes("Books");
foreach (XmlElement item in result)
{
//get title property from all nodes
foreach (XmlNode subitem in item.SelectSingleNode("title").ChildNodes)
{
if (subitem.Name == "title")
{
// do something
}
}
}