簡體   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