C# 操作xml 在指定节点插入新节点,该如何操作?

C#操作xml在指定节点插入新节点,该如何操作?<?xmlversion="1.0"standalone="yes"?><DocumentElement><MM02id=... C# 操作xml 在指定节点插入新节点,该如何操作?
<?xml version="1.0" standalone="yes"?><DocumentElement> <MM02 id="1"> <FNAM>BDC_SUBSCR</FNAM> <FVAL>SAPLMGD12033SUB7</FVAL> </MM02> <MM02 id="2"> <FNAM>BDC_SUBSCR</FNAM> <FVAL>SAPLMGD10001SUB9</FVAL> </MM02> <MM02 id="3"> <FNAM>BDC_SUBSCR</FNAM> <FVAL>SAPLMGD10001SUB10</FVAL> </MM02></DocumentElement>

实现后是:
<?xml version="1.0" standalone="yes"?><DocumentElement> <MM02 id="1"> <FNAM>BDC_SUBSCR</FNAM> <FVAL>SAPLMGD12033SUB7</FVAL> </MM02>
<MM02 id="1"> <FNAM>BDC_SUBSCR</FNAM> <FVAL>SAPLMGD12033SUB7</FVAL> </MM02> <MM02 id="2"> <FNAM>BDC_SUBSCR</FNAM> <FVAL>SAPLMGD10001SUB9</FVAL> </MM02> <MM02 id="3"> <FNAM>BDC_SUBSCR</FNAM> <FVAL>SAPLMGD10001SUB10</FVAL> </MM02></DocumentElement>
展开
 我来答
百度网友d206200
2013-10-14 · TA获得超过148个赞
知道小有建树答主
回答量:176
采纳率:0%
帮助的人:107万
展开全部

首先获取想要复制节点的值,然后添加。

 XElement rootNode = XElement.Load("test.xml");
            var result = from m in rootNode.Elements ("MM02")
                         where m.Attribute ("id").Value =="1"
                         select new 
                             {
                                 id=m.Attribute ("id").Value ,
                                 fname = m.Element ("FNAM").Value ,
                                 fval = m.Element("FVAL").Value  
                             };
            
            foreach (var s in result)
            { 
                XElement x = 
                    new XElement("MM02", new XAttribute("id",s.id ),
                    new XElement ("FNAM",s.fname ),
                    new XElement ("FVAL",s.fval)
                    );
                XElement node = rootNode.Element("MM02");
                rootNode.Element("MM02").AddAfterSelf(x);
                rootNode.Save("test.xml");
            }
追问
你好,我用你的来实现,结果是多了一行及复制了两行,希望您在帮忙修改下,谢谢
追答

这个问题是这样的,在操作集合时不应该直接对集合进行修改,应该操作临时变量,修改后代码为

XElement rootNode = XElement.Load("test.xml");
            XElement temp = XElement.Load("test.xml");
            var result = from m in temp.Elements("MM02")
                         where m.Attribute ("id").Value =="1"
                         select new 
                             {
                                 id=m.Attribute ("id").Value ,
                                 fname = m.Element ("FNAM").Value ,
                                 fval = m.Element("FVAL").Value  
                             };

            foreach (var s in result)
            {
               
                XElement x =
                    new XElement("MM02", new XAttribute("id", s.id),
                    new XElement("FNAM", s.fname),
                    new XElement("FVAL", s.fval)
                    );
                XElement node = rootNode.Element("MM02");
                rootNode.Element("MM02").AddAfterSelf(x);

            }
            rootNode.Save("test.xml");
quietpet
2013-10-14
知道答主
回答量:23
采纳率:0%
帮助的人:18.8万
展开全部
用Linq,去看看,很简单的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式