c# 在xml 跟节点下添加子节点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# 在xml 跟节点下添加子节点相关的知识,希望对你有一定的参考价值。
<?xml version="1.0" encoding="utf-8" ?>
<siteMapPath >
<siteMap url="" title="教学管理" description="" target="_self">
<siteMapNode url="" title="院系介绍" description="" target="_self">
<siteMapChildNode url="" title="金融学院" description="" target="_self"/>
<siteMapChildNode url="" title="经贸学院" description="" target="_self"/>
<siteMapChildNode url="" title="会计学院" description="" target="_self"/>
//想在这添加<siteMapChildNode url="" title="工商学院" description="" target="_self"/>
</siteMapNode>
<siteMapNode url="" title="教学成果" description="" target="_self"/>
//想在这添加<siteMapNode url="" title="实践教学" description="" target="_self"/>
</siteMap>
</siteMapPath>
请问在c# Button1_Click中添加那些代码实现添加<siteMapNode url="" title="实践教学" description="" target="_self"/>
在Button2_Click中添加那些代码实现添加<siteMapChildNode url="" title="工商学院" description="" target="_self"/>
siteMapNode为二级子栏目,siteMapChildNode为三级子栏目
望能给予解决,谢谢!
您的回答很详细,已经看懂了,谢谢!
但是随之又产生了个新问题,望能解决。
我的这个xml为一个网站导航条,由于补充问题限制这里简述了。
<siteMapPath>
<siteMap1 url="" title="教学管理" description="" target="_self">
<siteMapNode url="" title="院系介绍" description="" target="_self">
<siteMapChildNode url="" title="金融学院" description="" target="_self"/>
<siteMapChildNode url="" title="经贸学院" description="" target="_self"/>
</siteMapNode>
<siteMapNode url="" title="教学成果" description="" target="_self"/>
</siteMap1>
<siteMap2 url="" title="实践教学" description="" target="_self"/>
但在调用了this.AddXml2后
原xml位置发生变化了,导航顺序也就错了,变为
<siteMap2 url="" title="实践教学" description="" target="_self"/>
<siteMap1 url="" title="教学管理" description="" target="_self">
<siteMapNode url="" title="院系介绍" description="" target="_self">
请问在能否在储存xml时先按sitMapI进行排序,然后在save吗?
万分感谢 。
悬赏分一会就给你。
private void AddXml(string url, string title, string description, string target, int btn)
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("../../XMLFile.xml"); //加载xml文件
XmlNode rootXml = xmlDoc.SelectSingleNode("siteMapPath"); //查询XML文件的根节点("siteMapPath")
XmlNode xn = rootXml.SelectSingleNode("siteMap"); //查询节点("siteMap")
if (btn == 1)
XmlElement xe = xmlDoc.CreateElement("siteMap"); //创建节点("siteMap")
//设置新建节点("siteMap")的相关属性
xe.SetAttribute("url", url);
xe.SetAttribute("title", title);
xe.SetAttribute("description", description);
xe.SetAttribute("target", target);
if (xn.Attributes["title"].Value.Equals("教学管理"))
rootXml.InsertAfter(xe, xn); //将新建的节点xe放置于xn节点后
else
XmlNodeList xnl = xn.SelectNodes("siteMapNode"); //获取所有节点为"siteMapNode"的节点
foreach (XmlNode xnItem in xnl)
XmlElement xe = (XmlElement)xnItem; //将子节点类型转换为XmlElement类型
if (xe.GetAttribute("title").Equals("院系介绍")) //判断条件
XmlElement newXE = xmlDoc.CreateElement("siteMapChildNode");
newXE.SetAttribute("url", url);
newXE.SetAttribute("title", title);
newXE.SetAttribute("description", description);
newXE.SetAttribute("target", target);
xnItem.AppendChild(newXE);
xmlDoc.Save("../../XMLFile.xml");
private void button1_Click(object sender, EventArgs e)
this.AddXml("", "实践教学", "", "_self", 1);
MessageBox.Show("添加实践教学成功...");
private void button2_Click(object sender, EventArgs e)
this.AddXml("", "工商学院", "", "_self", 2);
MessageBox.Show("添加工商学院成功...");
应该就可以了, 你试看看吧.
呵呵O(∩_∩)O~ 赏分就算了, 回答你这个我也学到了东西. 呵呵本回答被提问者采纳 参考技术B XmlDocument doc = new XmlDocument();
//获得配置文件的全路径
string strFileName = AppDomain.CurrentDomain.BaseDirectory.ToString() + "配置文件.config";
doc.Load(strFileName);
XmlNode root = doc.DocumentElement;
//创建一个新的元素.
XmlElement elem = doc.CreateElement("price");
elem.InnerText = "19.95";
//添加新的元素
root.InsertBefore(elem, root.FirstChild);
//关闭打开的文档
doc.Save(strFileName);
添加一个按钮事件,在点击事件里添加此代码试试
如何在 C# 中将子节点添加到肥皂信封?
【中文标题】如何在 C# 中将子节点添加到肥皂信封?【英文标题】:How do I add child node to soap envelope in C#? 【发布时间】:2021-11-27 11:55:16 【问题描述】:要使用网络服务,我需要在soapEnvelope 中插入一个子节点,作为Body 节点的第一个子节点。然后我想在这个节点中导入一个 Xml 文档。 但是,它失败了,无论我做什么,它都会成为与我的导入并行的兄弟节点。我究竟做错了什么?这是我的代码(importeddoc 是传入的 xml 文档)
XmlDocument soapEnvelope = new XmlDocument();
soapEnvelope.LoadXml("<soapenv:Envelope xmlns:soapenv =
\"http://schemas.xmlsoap.org/soap/envelope/\"
xmlns:xd=\"http://www.w3.org/2000/09/xmldsig#\">
</soapenv:Envelope>");
XmlNode headernode = soapEnvelope.CreateNode("element",
"soapenv:Header", "http://schemas.xmlsoap.org/soap/envelope/");
XmlNode bodynode = soapEnvelope.CreateNode("element",
"soapenv:Body", "http://schemas.xmlsoap.org/soap/envelope/");
XmlElement root = soapEnvelope.DocumentElement;
root.AppendChild(headernode);
XmlNamespaceManager nsmgr = new
XmlNamespaceManager(importeddoc.NameTable);
nsmgr.AddNamespace("myextranodens", "http://....");
XmlNode containernode =
importeddoc.SelectSingleNode("/myimportdata", nsmgr);
XmlNode importNode = soapEnvelope.ImportNode(containernode,
true);
XmlNode myextranode =
bodynode.AppendChild(soapEnvelope.CreateElement("myextranodename"));
XmlNode final = myextranode.AppendChild(importNode);
bodynode.AppendChild(final);
root.AppendChild(bodynode);
return soapEnvelope;
我想要这样:
<soapenv:Body>
<myextranodename>
<myimportdata>
</myextranodename>
</soapenv:Body>
.. 但现在去:
<myextranodename></myextranodename>
<myimportdata>
我做错了什么?感谢您的帮助。
【问题讨论】:
【参考方案1】:啊!我必须删除最后一个 bodynode 附加子节点:
bodynode.AppendChild(final);
【讨论】:
以上是关于c# 在xml 跟节点下添加子节点的主要内容,如果未能解决你的问题,请参考以下文章
使用xslt和c#从中选择一个xml节点并根据其值添加更多节点[重复]