C# 操作xml移动节点到指定位置.............................................新手求解,在线等

hellenren12345 2012-10-17 07:45:12

<?xml version="1.0" encoding="utf-8"?>
<root>
<left>
<div1></div1>
<div2></div2>
<div3></div3>
</left>
<center>
<div4></div4>
<div5></div5>
<div6></div6>
</center>
<right>
<div7></div7>
<div8></div8>
<div9></div9>
</right>
</root>



/// <summary>
/// 将节点下的子节点移动至其他节点下
/// <root>
/// <test>
/// <test2></test2>
/// </test>
/// <test1>
/// </test1>
/// </root>
/// 将test2移动到test1下
/// </summary>
/// <param name="xmlPath">xxx.xml</param>
/// <param name="oldNode">root/test</param>
/// <param name="newNode">root/test1</param>
/// <param name="node">test2</param>
public static void XmlMoveNode(string xmlPath, string oldNode, string newNode, string node)
{
XmlDocument xDoc = new XmlDocument();
//加载app.config
xDoc.Load(xmlPath);
XmlNode xNode = xDoc.SelectSingleNode(oldNode);
XmlNode targetNode = xNode.SelectSingleNode(node); ;
if (targetNode == null)
{
throw new Exception("Node not found:" + node);
}
else
{
xNode.RemoveChild(targetNode);
}
XmlNode yNode = xDoc.SelectSingleNode(newNode);
yNode.AppendChild(targetNode);
xDoc.Save(xmlPath);
}


XmlMoveNode(xxx.xml,"root/left","root/right","div1");
这个方法只实现了将div1子节点从left移动到right,放在right最后一位。
我想修改XmlMoveNode(xxx.xml,"root/left","root/right","div1",2);
实现将div1子节点从left移动到right的第二个
结果如下:

<?xml version="1.0" encoding="utf-8"?>
<root>
<left>
<div2></div2>
<div3></div3>
</left>
<center>
<div4></div4>
<div5></div5>
<div6></div6>
</center>
<right>
<div7></div7>
<div1></div1>
<div8></div8>
<div9></div9>
</right>
</root>


我该怎么实现,最好给个XmlMoveNode()的源码。先谢过了。
...全文
464 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
白开水太浓 2013-07-05
  • 打赏
  • 举报
回复
那个index参数传2有什么用?
hellenren12345 2012-10-17
  • 打赏
  • 举报
回复
漂亮 结贴 给分 下次直接给代码,着急才要的。不着急就不上来问了,就自己写了。
Hauk 2012-10-17
  • 打赏
  • 举报
回复

//XmlMoveNode("..\\..\\test.xml", "//root/left", "//root/right", "//div1",2);
public static void XmlMoveNode(string xmlPath, string oldNode, string newNode, string node, int index)
{
XmlDocument xDoc = new XmlDocument();
//加载xml文件
xDoc.Load(xmlPath);
//获取原来所在节点
XmlNode xNode = xDoc.SelectSingleNode(oldNode);
//获取要移动的节点
XmlNode targetNode = xNode.SelectSingleNode(node); ;
if (targetNode == null)
{
throw new Exception("Node not found:" + node);
}
else
{
//在原位置删掉要移动的节点
xNode.RemoveChild(targetNode);
}
//获取需要移动到的目标节点
XmlNode yNode = xDoc.SelectSingleNode(newNode);

//判断目标节点是否有足够的子节点,有则按顺序插入,没有则添加。
if (yNode.HasChildNodes && yNode.ChildNodes.Count > index - 1)
{
//在目标节点指定的位置插入要移动的节点
yNode.InsertAfter(targetNode, yNode.ChildNodes[index - 2]);
}
else
{
yNode.AppendChild(targetNode);
}
xDoc.Save(xmlPath);
}


还是得应该有一定的动手能力啊
hellenren12345 2012-10-17
  • 打赏
  • 举报
回复
要源代码 测试成功后结贴
Hauk 2012-10-17
  • 打赏
  • 举报
回复
把这句:
yNode.AppendChild(targetNode);

改成
yNode.InsertAfter(targetNode, yNode.ChildNodes[index-2]);//索引从0开始,如入node在index之后。

在方法上加一个int index参数

自己加上判断,看看你移动的node有没有那么多子项。
hellenren12345 2012-10-17
  • 打赏
  • 举报
回复
那怎么实现啊,新手,帮忙实现下XmlMoveNode()
bdmh 2012-10-17
  • 打赏
  • 举报
回复
逻辑如下

取出要移动的节点内容(此时可以删除源节点),然找到新位置,添加node

110,577

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧