繁体   English   中英

到达XmlDocument的“底部”-C#

[英]Getting to “bottom” of XmlDocument - C#

我有两个版本的XmlDocument

版本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;
}

毫无疑问,这是错误的,请两种情况下有人可以帮助我获得正确的结果吗?

您可以将Xpath与XmlDocument一起使用:

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

循环不是唯一的方法-另一种方法是生成具有XML属性的自定义类的对象图,并使用XML serilizer将XML转换为对象图。

有关详细信息,请参见http://msdn.microsoft.com/en-gb/library/system.xml.serialization.xmlserializer.aspx

一种替代方法是使用XDocument并使用linq查询要直接从XDocument中获取的值。

请参阅使用Linq和XDocument,是否可以将所有子元素都放在父标记下?

希望这可以帮助

您应该能够使用一些xPath来获取所需的节点。

尝试类似

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM