求教C#方法能否读取XML文档删除节点同时保留属性值!!! xmlc# 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用XmlDocument,百度一下c#xml读写方法很多的。你的xml应该是<SYS_NO>1</SYS_NO>吧。 XmlDocument xml = new XmlDocument(); xml.Load(xmlpath);//加载xml文件,xmlpath为xml文件的路径 XmlNodeList keys = xml.SelectSingleNode("PARA").ChildNodes; XmlElement root = xml.CreateElement("PARA");//创建根节点 XmlDocument new_xml = new XmlDocument(); foreach (XmlElement key in keys)//遍历key节点(ROW) { XmlNodeList nodes = key.ChildNodes; foreach (XmlElement node in nodes)//遍历key节点下的子节点(COL) { root.AppendChild(node);//SYS_NO } } new_xml.AppendChild(root); xml.Save(xmlpath);//覆盖保存回xml 额,最后那个xml.Save(xmlpath);//覆盖保存回xml写错了,应该是new_xml.Save(xmlpath);//覆盖保存回xml。还有这个我没测试,大概就是这个意思 感谢的你回复!!!断点跟到new_xml.AppendChild(root);这段就报错了,能不能辛苦下帮我测试下。错误提示是:未处理的“System.ArgumentException”类型的异常出现在 system.xml.dll 中。其他信息: 要插入的节点出自不同的文档上下文。//////////////////////////////////////////////////////////////////////////////////////////////////////遍历子节点COL的时候快速监视好像只有PARA Quote: 引用 3 楼 huang369509940 的回复:Quote: 引用 2 楼 huang369509940 的回复:然后将SYS_NO提取到new_xml,思路应该是对的,正在找问题出在哪 先问一下啊 你<SYS_NO>只会有一个还是会有多个? 额 现在这个测试没有问题了 string xmlpath = @"F:\Testt\Test\Test\XMLFile1.xml"; XmlDocument xml = new XmlDocument(); xml.Load(xmlpath);//加载xml文件,xmlpath为xml文件的路径 XmlNodeList keys = xml.SelectSingleNode("PARA").ChildNodes; XmlDocument new_xml = new XmlDocument(); XmlElement root = new_xml.CreateElement("PARA");//创建根节点 foreach (XmlElement key in keys)//遍历key节点(ROW) { XmlNodeList nodes = key.ChildNodes; foreach (XmlElement node in nodes)//遍历key节点下的子节点(COL) { XmlElement n = new_xml.CreateElement("SYS_NO"); n.InnerText = node.InnerText; root.AppendChild(n);//SYS_NO } } new_xml.AppendChild(root); new_xml.Save(xmlpath);//覆盖保存回xml 目前我测试传的是一个参数,如果在现场的话是传多个参数!整体结构大概是这样(如下):<?xml version="1.0" encoding="utf-8"?><PARA><ROW><COL><SYS_NO>1<SYS_NO><DETECT_TASK_NO>123</DETECT_TASK_NO><BAR_CODE>456</BAR_CODE></COL></ROW></PARA>////////////////////////////////////////////////////////都是在<COL></COL>里面 目前我测试传的是一个参数,如果在现场的话是传多个参数!整体结构大概是这样(如下):<?xml version="1.0" encoding="utf-8"?><PARA><ROW><COL><SYS_NO>1<SYS_NO><DETECT_TASK_NO>123</DETECT_TASK_NO><BAR_CODE>456</BAR_CODE></COL></ROW></PARA>////////////////////////////////////////////////////////都是在<COL></COL>里面看这个样子是<SYS_NO>只会出现一次哈,那这个就没问题了。XmlDocument xml = new XmlDocument(); xml.Load(xmlpath);//加载xml文件,xmlpath为xml文件的路径 XmlNodeList keys = xml.SelectSingleNode("PARA").ChildNodes; XmlDocument new_xml = new XmlDocument(); XmlElement root = new_xml.CreateElement("PARA");//创建根节点 foreach (XmlElement key in keys)//遍历key节点(ROW) { XmlNodeList nodes = key.ChildNodes; foreach (XmlElement node in nodes)//遍历key节点下的子节点(COL) { XmlElement n = new_xml.CreateElement(node.Name);//就是把ROW和COL都删了,<SYS_NO><DETECT_TASK_NO><BAR_CODE>都保留 n.InnerText = node.InnerText; root.AppendChild(n); } } new_xml.AppendChild(root); new_xml.Save(xmlpath);//覆盖保存回xml 额 刚才那个还是有问题 这个测试了没问题 = =XmlDocument xml = new XmlDocument(); xml.Load(xmlpath);//加载xml文件,xmlpath为xml文件的路径 XmlNodeList keys = xml.SelectSingleNode("PARA").ChildNodes; XmlDocument new_xml = new XmlDocument(); XmlElement root = new_xml.CreateElement("PARA");//创建根节点 foreach (XmlElement key in keys)//遍历key节点(ROW) { XmlNodeList nodes = key.ChildNodes; foreach (XmlElement node in nodes)//遍历key节点下的子节点(COL) { foreach (XmlElement para in node.ChildNodes) { XmlElement n = new_xml.CreateElement(para.Name);//就是把ROW和COL都删了,<SYS_NO><DETECT_TASK_NO><BAR_CODE>都保留 n.InnerText = para.InnerText; root.AppendChild(n); } } } new_xml.AppendChild(root); new_xml.Save(xmlpath);//覆盖保存回xml<PARA> <ROW> <COL> <SYS_NO>1</SYS_NO> <DETECT_TASK_NO>123</DETECT_TASK_NO> <BAR_CODE>456</BAR_CODE> </COL> </ROW></PARA>执行完以后<PARA> <SYS_NO>1</SYS_NO> <DETECT_TASK_NO>123</DETECT_TASK_NO> <BAR_CODE>456</BAR_CODE></PARA> Quote: 引用 12 楼 huang369509940 的回复:真心感谢,受益匪浅!!!能加个好友吗!!!(QQ:37109598) internal VisualStyleRenderer rOpen = new VisualStyleRenderer(VisualStyle 面向对象(OO)的学习指导 老板给一个USB语音盒还有它的驱动和DLL文件,让我写一个程序出来,求救啊!!! IE标签页的刷新、关闭,无法释放控件资源 自己拿来练手的一个项目,有点小问题。请给看一下。。 怎样使正则表达式的匹配结果不重复? 求改个C#函数为断点续传? web 录入问题??? 为何无法调试 请问套接字是什么东西来的? C#如何打开新窗口并设置控件。 JS调用cs方法出错,急,求大神帮助
xml.Load(xmlpath);//加载xml文件,xmlpath为xml文件的路径
XmlNodeList keys = xml.SelectSingleNode("PARA").ChildNodes;
XmlElement root = xml.CreateElement("PARA");//创建根节点
XmlDocument new_xml = new XmlDocument();
foreach (XmlElement key in keys)//遍历key节点(ROW)
{
XmlNodeList nodes = key.ChildNodes;
foreach (XmlElement node in nodes)//遍历key节点下的子节点(COL)
{
root.AppendChild(node);//SYS_NO
}
}
new_xml.AppendChild(root);
xml.Save(xmlpath);//覆盖保存回xml
还有这个我没测试,大概就是这个意思
断点跟到new_xml.AppendChild(root);这段就报错了,能不能辛苦下帮我测试下。
错误提示是:
未处理的“System.ArgumentException”类型的异常出现在 system.xml.dll 中。
其他信息: 要插入的节点出自不同的文档上下文。
//////////////////////////////////////////////////////////////////////////////////////////////////////遍历子节点COL的时候快速监视好像只有PARA
XmlDocument xml = new XmlDocument();
xml.Load(xmlpath);//加载xml文件,xmlpath为xml文件的路径
XmlNodeList keys = xml.SelectSingleNode("PARA").ChildNodes;
XmlDocument new_xml = new XmlDocument();
XmlElement root = new_xml.CreateElement("PARA");//创建根节点
foreach (XmlElement key in keys)//遍历key节点(ROW)
{
XmlNodeList nodes = key.ChildNodes;
foreach (XmlElement node in nodes)//遍历key节点下的子节点(COL)
{
XmlElement n = new_xml.CreateElement("SYS_NO");
n.InnerText = node.InnerText;
root.AppendChild(n);//SYS_NO
}
}
new_xml.AppendChild(root);
new_xml.Save(xmlpath);//覆盖保存回xml
目前我测试传的是一个参数,如果在现场的话是传多个参数!整体结构大概是这样(如下):
<?xml version="1.0" encoding="utf-8"?>
<PARA>
<ROW>
<COL>
<SYS_NO>1<SYS_NO>
<DETECT_TASK_NO>123</DETECT_TASK_NO>
<BAR_CODE>456</BAR_CODE>
</COL>
</ROW>
</PARA>
////////////////////////////////////////////////////////
都是在<COL></COL>里面
目前我测试传的是一个参数,如果在现场的话是传多个参数!整体结构大概是这样(如下):
<?xml version="1.0" encoding="utf-8"?>
<PARA>
<ROW>
<COL>
<SYS_NO>1<SYS_NO>
<DETECT_TASK_NO>123</DETECT_TASK_NO>
<BAR_CODE>456</BAR_CODE>
</COL>
</ROW>
</PARA>
////////////////////////////////////////////////////////
都是在<COL></COL>里面
看这个样子是<SYS_NO>只会出现一次哈,那这个就没问题了。XmlDocument xml = new XmlDocument();
xml.Load(xmlpath);//加载xml文件,xmlpath为xml文件的路径
XmlNodeList keys = xml.SelectSingleNode("PARA").ChildNodes;
XmlDocument new_xml = new XmlDocument();
XmlElement root = new_xml.CreateElement("PARA");//创建根节点
foreach (XmlElement key in keys)//遍历key节点(ROW)
{
XmlNodeList nodes = key.ChildNodes;
foreach (XmlElement node in nodes)//遍历key节点下的子节点(COL)
{
XmlElement n = new_xml.CreateElement(node.Name);//就是把ROW和COL都删了,<SYS_NO><DETECT_TASK_NO><BAR_CODE>都保留
n.InnerText = node.InnerText;
root.AppendChild(n);
}
}
new_xml.AppendChild(root);
new_xml.Save(xmlpath);//覆盖保存回xml
xml.Load(xmlpath);//加载xml文件,xmlpath为xml文件的路径
XmlNodeList keys = xml.SelectSingleNode("PARA").ChildNodes;
XmlDocument new_xml = new XmlDocument();
XmlElement root = new_xml.CreateElement("PARA");//创建根节点
foreach (XmlElement key in keys)//遍历key节点(ROW)
{
XmlNodeList nodes = key.ChildNodes;
foreach (XmlElement node in nodes)//遍历key节点下的子节点(COL)
{
foreach (XmlElement para in node.ChildNodes)
{
XmlElement n = new_xml.CreateElement(para.Name);//就是把ROW和COL都删了,<SYS_NO><DETECT_TASK_NO><BAR_CODE>都保留
n.InnerText = para.InnerText;
root.AppendChild(n);
}
}
}
new_xml.AppendChild(root);
new_xml.Save(xmlpath);//覆盖保存回xml
<PARA>
<ROW>
<COL>
<SYS_NO>1</SYS_NO>
<DETECT_TASK_NO>123</DETECT_TASK_NO>
<BAR_CODE>456</BAR_CODE>
</COL>
</ROW>
</PARA>执行完以后<PARA>
<SYS_NO>1</SYS_NO>
<DETECT_TASK_NO>123</DETECT_TASK_NO>
<BAR_CODE>456</BAR_CODE>
</PARA>