中易网

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

答案:2  悬赏:30  
解决时间 2021-01-10 05:41
C# 操作xml 在指定节点插入新节点,该如何操作?
最佳答案
首先获取想要复制节点的值,然后添加。
 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");
全部回答
用Linq,去看看,很简单的
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
马上高考了想找一个高三的补课班,天生壹本怎
“信”的四字词语有哪些?
万家乐眼镜地址在哪,我要去那里办事
我中考总分大概在540左右,我是上高中还是上
2018郯城六中是怎样分班的
Meters/bonwe(金山街店)地址在什么地方,我要
研究型、艺术型的适合什么职业
法律不涉及以往`法律上有没有说到这条?
谁玩圣火徽章的朋友可以告诉我下<狙击箭>是谁
请问这张8050的值钱吗?
如何制定产品促销策略
哪个拍照搜题软件好
请问这条管是什么?
如果签了终身合同,有什么好处?
乐彩750写真机英文版怎么调成中文的
推荐资讯
萧敬腾有一首歌 开头第一句是我能想象..歌名
思远二手车交易服务部地址在什么地方,我要处
今天我游完了红河谷用英语怎么说?
高分:稼穑格好不好?
为什么我这么无能力
南方气温14度时河水的温度是多少
融通汽车贸易有限公司地址好找么,我有些事要
一台压路机的前轮是圆柱形,轮宽2m,直径1.2m
Linux命令中,请问下tar -vxzf hadoop-2.7.0.
三颗星连一起的是什么星座问的是在天空上有一
广州实木家具品牌有哪些
临近暑期开学需要注意哪些网络诈骗
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?