[英]Swapping nodes in xmlNodeList C#
假設具有以下xml
<test>
<step>
<var name="name1" />
<var name="name2" />
</step>
<step>
<var name="name3" />
<var name="name4" />
</step>
<step>
<var name="name5" />
<var name="name6" />
</step>
</test>
我正在使用XmlNodeList,以“ step”分隔。 有沒有一種方法可以直接在xmlnodelist中交換或替換步驟?
需要這樣:
<test>
<step>
<var name="name3" />
<var name="name4" />
</step>
<step>
<var name="name1" />
<var name="name2" />
</step>
<step>
<var name="name5" />
<var name="name6" />
</step>
</test>
您可以使用XDocument類代替XMLDocument。 這會將var節點name3與name6交換。
using System.Linq;
using System.Xml.Linq;
class Test
{
static void Main()
{
XDocument document = XDocument.Load("test.xml");
Swap("name3", "name6", document);
document.Save("test.xml");
}
static void Swap(string nameOne, string nameTwo, XDocument document)
{
var nameOneNode = document.Descendants("var").FirstOrDefault(p => p.Attribute("name").Value == nameOne);
var nameTwoNode = document.Descendants("var").FirstOrDefault(p => p.Attribute("name").Value == nameTwo);
nameOneNode.Attribute("name").Value = nameTwo;
nameTwoNode.Attribute("name").Value = nameOne;
}
}
讀取XML文件時,不必一定要保留XML文件中節點的順序。 例如,如果您的文件如下所示:
<xmlcontent>
<node value="Hello" />
<node value="World" />
</xmlcontent>
讀取的XML可能返回以下節點:
<xmlcontent>
<node value="World" />
<node value="Hello" />
</xmlcontent>
要將“順序”之類的內容應用於XML節點,您需要添加一個可以排序的屬性,例如
<xmlcontent>
<node index="1" value="Hello" />
<node index="2" value="World" />
</xmlcontent>
在這種情況下,“交換”兩個元素將歸結為交換索引值。
終於設法做到了,下面是代碼:
XmlDocument xml;
XmlNodeList xmlList;
xml = new XmlDocument();
xml.Load(path);
xmlList = xml.GetElementsByTagName("step");
XmlNode refNode = xmlList[1];
XmlNode newNode = xmlList[0];
xml.DocumentElement.InsertAfter(newNode, refNode);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.