2014-02-27 118 views
-11

我有一個xml文件,我想要做的是顛倒它的元素。我的意思是第一個元素應該是最後一個,最後應該是第一個。我希望所有元素都可以逆轉。如何反轉Xml文件的內容?

Ex。這應該是

<Elements> 
<Element1> 
<Element2> 
<Element3> 
<Element4> 
</ Elements> 

<Elements> 
<Element4> 
<Element3> 
<Element2> 
<Element1> 
</ Elements> 

誰能幫助我實現這一目標?

+3

你可以請發表你寫的代碼來做到這一點嗎? –

+3

這個問題沒有意義。 XML標準沒有表示XML解析器應該讀取元素的順序。雖然我認識的所有解析器按照它們被發現的順序讀取元素,但實際上*是*在同一層級上沒有元素的順序。所以實際上沒有什麼可以「反向」的。 –

回答

3

將它們推入堆棧然後彈出它們以相反的順序重建它們。對文檔中的每一組嵌套元素遞歸地執行此操作。

+0

你能給我舉個例子嗎?我的意思是代碼。 – maestrosan11

+2

@ maestrosan11你介意試一下嗎?你已經得到了一些答案,這會讓你走向正確的方向。沒有人在這裏爲你做這件事非常積極。 – tnw

+0

@ShaneWealti感謝您的建議。我嘗試了一下,並且從別人那裏得到了一些幫助,使它成功。 – maestrosan11

1

確定。我已經創建了一個反向解決方案。

XmlDocument xd = new XmlDocument(); 
using (write = XmlWriter.Create(path2)) 
{ 
    write.WriteStartDocument(); 
    write.WriteStartElement("Customers"); 
    write.WriteEndElement(); 
    write.WriteEndDocument(); 
} 

xd.Load(path2); 

for (int i = count - 1; i >= 0; i--) 
{  
    XmlNode node = xdoc.ChildNodes[1].ChildNodes[i]; 
    //XComment com = new XComment("-------Reversed-------"); 
    XmlNode xnode = xd.CreateNode(XmlNodeType.Element, "Customer", null); 

    XmlNode nodeId = xd.CreateElement("Id"); 
    nodeId.InnerText = node.ChildNodes[0].InnerText; 

    XmlNode nodeName = xd.CreateElement("Name"); 
    nodeName.InnerText = node.ChildNodes[1].InnerText; 

    XmlNode nodeAge = xd.CreateElement("Age"); 
    nodeAge.InnerText = node.ChildNodes[2].InnerText; 

    xnode.AppendChild(nodeId); 
    xnode.AppendChild(nodeName); 
    xnode.AppendChild(nodeAge); 

    xd.DocumentElement.AppendChild(xnode); 

    xd.Save(path2); 
} 

上述代碼首先加載其元素必須顛倒過來的文件的內容。然後它創建一個新文件並以相反的順序將文件存儲在該文件中。 希望這會幫助某人。

+0

很高興你給它一個嘗試。通常情況下,你應該在*之前嘗試這樣做*但是在這裏問。 – ouflak