2013-02-01 114 views
1

我的XmlDocument前往的XmlDocument的 “底部” - C#

的两个版本

1版

<?xml version="1.0" encoding="UTF-8"?> 
<topElement> 

<childElement1>Value</childElement1> 
<childElement2>Value</childElement2> 
... 
</topElement> 

2版

<?xml version="1.0" encoding="UTF-8"?> 
<topElement> 

<group1> 
<childElement1>Value</childElement1> 
<childElement2>Value</childElement2> 
</group1> 

<group2> 
<childElement1>Value</childElement1> 
<childElement2>Value</childElement2> 
</group2> 
</topElement> 

在这两个场合,我需要获取所有childElements的所有值并将它们添加到CustomObject的集合中。 据我所知,这可以通过迭代来完成。

所以我得到的顶部节点,是这样的:

CustomObject getLow(XmlNode node, CustomObject customObject) 
{ 
    foreach (XmlNode n in node.ChildNodes) 
    { 
     if (n.HasChildNodes == true) 
     { 
      getLow(n); 
     } 
     customObject.collection.Add(n.Name, n.InnerText); 
    } 
    return customObject; 
} 

毫无疑问,这是错误的,请能有人帮助我得到正确的结果,在这两种情况下?

+0

好吧,也许While循环是不是一个好主意=)应我用if语句呢? – Alex

+1

什么是'getLow(XmlNode xmlNode)' – t3hn00b

+1

如果'n'有子节点,你将永远不会离开'while while循环。 – t3hn00b

回答

3

您可以使用XPath与你的XmlDocument:

XmlDocument xmlDoc = new XmlDocument("yourxml.xml"); 
foreach (XmlNode childElement in xmlDoc.SelectNodes("//childElement")) 
{ 
    customObject.collection.Add(childElement.Name, childElement.InnerText); 
} 
1

您应该能够使用一些XPath来得到你所寻找的节点。

尝试像

node.SelectNodes("//*[count(child::*)=0]")