我试图想出一种方法来复制XML块,然后将其粘贴到另一个块下面。例如,我想复制Cars中的所有内容并将其粘贴到Truck节点下面。
来源:
<Vehicles>
<Cars>
<Car name="Mustang">
<engine>V8</engine>
</Car>
<Car name="Taurus">
<engine>V6</engine>
</Car>
</Cars>
<Truck name="F-150" />
<Truck name="Ranger" />
</Vehicles>
期望的结果:
<Vehicles>
<Truck name="F-150" />
<Truck name="Ranger" />
<Cars>
<Car name="Mustang">
<engine>V8</engine>
</Car>
<Car name="Taurus">
<engine>V6</engine>
</Car>
</Cars>
</Vehicles>
我已尝试过AddAfterSelf和CloneNode等方法,但它们同时进行复制和粘贴。我需要它来复制Cars块,然后在运行其他代码之后,将它粘贴到最后一个Truck节点之后。我也尝试使用剪贴板,但无法弄清楚如何复制XML块并粘贴它。
答案 0 :(得分:0)
只需保存对要复制的根节点的引用,然后根据需要随时调用CloneNode。
编辑:这让我觉得很脏:
doc
.Element("Vehicles")
.ReplaceAll
(
doc
.Element("Vehicles")
.Elements("Truck")
.OrderBy(i => i.Attribute("name").Value)
.Union
(
new []
{
new XElement
(
"Cars",
doc
.Element("Vehicles")
.Element("Cars")
.Elements()
.OrderBy(i => i.Attribute("name").Value).ToArray()
)
}
)
);
但它确实起到了作用。
答案 1 :(得分:0)
//Load XML file to sort cars.
XElement file = XElement.Load(@"..\Test.xml");
//Sort cars by "name" and save the file.
file.Element("Cars").ReplaceNodes(file.Element("Cars").Elements("Car")
.OrderBy(n => (string)n.Attribute("name")));
file.Save(@"..\Test.xml");
//Load XML file to sort Trucks.
XDocument doc = XDocument.Load(@"..\Test.xml");
//Sort trucks by "name" and save file.
doc.Element("Vehicles").ReplaceAll(doc.Element("Vehicles").Elements()
.OrderBy(t => t.Name == "Truck").ThenBy(m => (string)m.Attribute("name")));
doc.Save(@"..\Test.xml");
//Open sorted XML file to verify sort.
Process.Start(@"..\Test.xml");