XElement 怎么在指定节点添加子节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XElement 怎么在指定节点添加子节点相关的知识,希望对你有一定的参考价值。

<Agreement_Infos >
<Agreement_Info>
<Agreement_Type_ID>20120801005</Agreement_Type_ID>
<Agreement_Name>dsfsdf</Agreement_Name>
<Agreement_Status>1</Agreement_Status>
<Supplier_ID>20120802002</Supplier_ID>
<Agreement_Version>V1.0.0</Agreement_Version>
</Agreement_Info>
</Agreement_Infos>
我想在<Agreement_Info>这一级下面再加一个 怎么加

我是用System.Xml.Linq.XElement xml这个的 不是System.Xml.XmlElement

首先获取想要复制节点值添加

 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");
            
参考技术A 不是有Add方法么,直接添加子元素,你先用xpath找到Agreement_Info就可以了追问

有代码吗

追答

var ai = doc.XPathSelectElement("//Agreement_Infos/Agreement_Info");
ai.Add(new XElement());

懒啊

参考技术B tokyo木问问就知道了,微薄全部业务他扣扣3476后39411

属性名称在Xelement的setattribute属性中重叠

我正在尝试重新构建XMI结构。所以为此我需要添加如下的子节点

 <node xmi:type="shape" xmi:id="12358" type="rectangle">
 </node >

因此创建了一个XMLElement并尝试使用下面的代码添加属性

 XmlElement child= papNotdoc.CreateElement("node");
 child.SetAttribute("type", "http://www.omg.org/XMI", "Shape");
 child.SetAttribute("id", "http://www.omg.org/XMI","12358");
 child.SetAttribute("type", "rectangle");

使用命名空间URL,以便我在其中一个type属性中获得前缀XMI:

但不幸的是,XML元素将两个类型命名的属性视为相同的属性,并给我一个输出如下

 <node xmi:type="rectangle" xmi:id="12358">
 </node >

我想要一个节点中的xmi:type和type属性。如何实现它?

答案

您应该将null提供给SetAttribute方法的namespaceURI参数。

XmlElement child = papNotdoc.CreateElement("node");
child.SetAttribute("type", "http://www.omg.org/XMI", "Shape");
child.SetAttribute("id", "http://www.omg.org/XMI", "12358");
child.SetAttribute("type", null, "rectangle");

以上是关于XElement 怎么在指定节点添加子节点的主要内容,如果未能解决你的问题,请参考以下文章

easyui tree 怎么获取选择节点子节点上的值?js怎么写?

给元素添加子节点,元素子节点数改变,反过来影响上方调用其值的异步任务回调函数(如click。load,定时器等

给元素添加子节点,元素子节点数改变,反过来影响上方调用其值的异步任务回调函数(如click。load,定时器等

实战之部署Redis哨兵模式-Docker版本

根据特定条件添加Xelement c#

计算特定XML节点c#的子节点数[重复]