[英]copy all xml attributes from 1 node to another
嗨,我有 2 个 xml 节点,我只需要将第一个中的所有属性复制到另一个`
XmlDocument doc = new XmlDocument();
XmlDocument doc1 = new XmlDocument();
doc.Load(somepath);
XmlNode node=doc.CreateNode(System.Xml.XmlNodeType.Element, "something", null);
System.Xml.XmlNodeList list = doc.GetElementsByTagName("tananana");
XmlNode node1= list[0];
Foreach (XmlAttribute att in node1.Attributes)
{
System.Xml.XmlAttribute rAtt= doc.CreateAttribute(att.name ); //att.name is problem
rAtt.Value=att.Value; //att.value is problem
node1.Attributes.Add(rAtt);
}
输入 test.xml:
<data>
<tananana a1="1" a2="2"/>
<tananana a3="3" a4="5"/>
<tananana a1="5" a2="7"/>
</data>
输出:
<data>
<something a1="1" a2="2" />
<something a3="3" a4="5" />
<something a1="5" a2="7" />
</data>
输入 test.xml:
<data>
<tananana a1="1" a2="2"/>
<tananana a3="3" a4="5"/>
<tananana a1="5" a2="7"/>
</data>
输出:
<data>
<something a1="1" a2="2" />
<something a3="3" a4="5" />
<something a1="5" a2="7" />
</data>
代码:
namespace StackOverflow
{
using System.IO;
using System.Linq;
using System.Xml.Linq;
class Program
{
static void Main(string[] args)
{
var doc1 = XDocument.Load("test.xml");
var doc2 = new XDocument(new XElement(doc1.Root.Name));
doc2.Root.Add(doc1.Root
.Elements("tananana")
.Select(x => new XElement("something", x.Attributes())));
}
}
}
如果您想使用 XmlDocument,那么这将起作用。
如果属性存在于 dstNode 中,则 SetAttribute() 复制值,否则创建新属性
protected void CopyAllAttributesValues(XmlElement srcNode, XmlElement dstNode)
{
foreach (XmlAttribute att in srcNode.Attributes)
{
dstNode.SetAttribute(att.LocalName, att.Value);
}
}
除了复制名称和值之外,您还应该考虑如果一个属性以命名空间为前缀会发生什么,到目前为止其他答案都没有。 因此只需使用CloneNode方法,而不是“手动”复制。
XmlAttribute newAttribute = (XmlAttribute)sourceAttribute.CloneNode(true);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.