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吗?
万分感谢 。
悬赏分一会就给你。

参考技术A 这个是修改后的...
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 跟节点下添加子节点的主要内容,如果未能解决你的问题,请参考以下文章

是元素节点的属性节点子节点

将命名空间添加到 xml 根节点 c#

如何将XML子节点添加到父节点c#

使用xslt和c#从中选择​​一个xml节点并根据其值添加更多节点[重复]

如何通过控制 C# 中的属性 ID 在 XML 中添加节点?

C# 添加xml节点多了xmlns属性问题