如何修改xml节点的名字(name)而非属性值

dzhl01 2010-05-15 06:12:41
xml大致结构如下:
原文如下
<?xml version="1.0" encoding="gb2312"?>
<toolbox>
<菜单1 backcol="r红色" text="图像工具" textfont="宋体" textsize="12" />
<菜单2 backcol="蓝色" text="视频工具" textfont="微软雅黑" textsize="13" />
<菜单3 backcol="绿色" text="网络工具" textfont="楷体" textsize="14" />
</toolbox>


现希望删除
<菜单2 backcol="蓝色" text="视频工具" textfont="微软雅黑" textsize="13" />
节点

结果如下:
<?xml version="1.0" encoding="gb2312"?>
<toolbox>
<菜单1 backcol="r红色" text="图像工具" textfont="宋体" textsize="12" />
<菜单2 backcol="绿色" text="网络工具" textfont="楷体" textsize="14" />
</toolbox>
实际上就是完成删除前一项后,后续项都改名为前一项名字的功能。
三种方案:
1。先删除<菜单2 backcol="蓝色" text="视频工具" textfont="微软雅黑" textsize="13" />
然后将节点“菜单3”改名为“菜单2”,这种方法感觉操作较少,最乐意采纳,但不会实现。
2。将“菜单3”的各项属性陆续传递给“菜单2”,这样操作太多,不太喜欢。
3。文本替换,不知效率如何,大家可发表意见。

除此三种方法,不知大家可有更好的办法?
...全文
557 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xk1126 2010-05-15
  • 打赏
  • 举报
回复

XmlDocument xmlDt= new XmlDocument();
xmlDt.Load("XML文件名");
XmlNode nodes= doc.SelectSingleNode("//toolbox/菜单2[@backcol='']");
if(nodes!=null)
{
XmlElement xml=no as XmlElement);
xml.RemoveAll();
}
websco 2010-05-15
  • 打赏
  • 举报
回复
方法是有的,而且应有多种,用 ReplaceNode()、ReplaceAll() 等也能实现,不过这并不是问题的关键,问题的关键是在于你的这个设计是完全不合理的。

支持3楼、4楼的说法,这才是正确的设计方式。
zzx509 2010-05-15
  • 打赏
  • 举报
回复
你这样是自找麻烦,XML的构架设计要合理点。你在程序中需要的菜单1、菜单2可以根据节点的索引来获取。
或者是将菜单1作为属性,删除后更改其后所有节点的属性。
<toolbox>
<menus>
<menu backcol="r红色" text="图像工具" textfont="宋体" textsize="12" />
<menu backcol="蓝色" text="视频工具" tex……

获取 打错了字
zzx509 2010-05-15
  • 打赏
  • 举报
回复
你这样是自找麻烦,XML的构架设计要合理点。你在程序中需要的菜单1、菜单2可以根据节点的索引来获取。
获取是将菜单1作为属性,删除后更改其后所有节点的属性。
<toolbox>
<menus>
<menu backcol="r红色" text="图像工具" textfont="宋体" textsize="12" />
<menu backcol="蓝色" text="视频工具" textfont="微软雅黑" textsize="13" />
<menu backcol="绿色" text="网络工具" textfont="楷体" textsize="14" />
</menus>
</toolbox>

如果你非要改节点的Name,保存时用XmlTextWriter来写入。
wuyq11 2010-05-15
  • 打赏
  • 举报
回复
XmlDocument doc= new XmlDocument();
doc.Load("");
XmlNode no= doc.SelectSingleNode("//toolbox/菜单2[@backcol='']");
if(no!=null)
{
XmlElement xe=(XmlElement)no;
xe.RemoveAll();
}http://topic.csdn.net/u/20090515/12/619c10d1-af12-4c90-bfcd-101da5dd8ddf.html
qy300 2010-05-15
  • 打赏
  • 举报
回复
用XSLT。

110,538

社区成员

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

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

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