C# 更改XmlElement名称属性

C# 更改XmlElement名称属性,c#,xml,replace,c++-cli,C#,Xml,Replace,C++ Cli,我想更改c++/cli中XmlElement的Name属性 我想执行myxmlem.Name=xyz,但编译器告诉我无法对Name属性执行set操作 i、 e 改为 <xyz/> 我怎样才能做到这一点 谢谢 不能更改XmlElement的Name属性,因为该名称是只读的 但是,您可以在C中执行类似以下示例的操作 XmlElement xyz = myXmlElem.OwnerDocument.CreateElement("xyz"); myXmlElem.ParentNode.Re

我想更改c++/cli中XmlElement的Name属性

我想执行myxmlem.Name=xyz,但编译器告诉我无法对Name属性执行set操作

i、 e

改为

<xyz/>
我怎样才能做到这一点


谢谢

不能更改XmlElement的Name属性,因为该名称是只读的

但是,您可以在C中执行类似以下示例的操作

XmlElement xyz = myXmlElem.OwnerDocument.CreateElement("xyz");
myXmlElem.ParentNode.ReplaceChild(xyz, myXmlElem);
编辑以回应您的评论

XmlElement xyz = myXmlElem.OwnerDocument.CreateElement("xyz");

for(int i = 0; i < myXmlElem.ChildNodes.Count; i++){
    XmlNode child = myXmlElem.ChildNodes[i];
    xyz.AppendChild(child.CloneNode(true));
}

myXmlElem.ParentNode.ReplaceChild(xyz, myXmlElem);

不能更改XmlElement的Name属性,因为该名称是只读的

但是,您可以在C中执行类似以下示例的操作

XmlElement xyz = myXmlElem.OwnerDocument.CreateElement("xyz");
myXmlElem.ParentNode.ReplaceChild(xyz, myXmlElem);
编辑以回应您的评论

XmlElement xyz = myXmlElem.OwnerDocument.CreateElement("xyz");

for(int i = 0; i < myXmlElem.ChildNodes.Count; i++){
    XmlNode child = myXmlElem.ChildNodes[i];
    xyz.AppendChild(child.CloneNode(true));
}

myXmlElem.ParentNode.ReplaceChild(xyz, myXmlElem);

您可以使用Linq to Xml,它支持更改XElement的名称:

XDocument doc = XDocument.Parse("<foo><bar /></foo>");
doc.Root.Name = "changed";//now it will look like <changed><bar /></changed>

您可以使用Linq to Xml,它支持更改XElement的名称:

XDocument doc = XDocument.Parse("<foo><bar /></foo>");
doc.Root.Name = "changed";//now it will look like <changed><bar /></changed>

是的,我想那是我最后的选择。。但是我也有一堆属性和子元素,对于原始元素,我也必须移动它们。听起来像是头痛!myXmlElem.ChildNodes[i]将包含属性?是的,它将包含任何类型的节点属性、文本、元素等。@Matt ChildNodes属性不包含属性。如在上运行示例代码所示。在示例中,标题和价格已打印,但ISBN未打印。+1,您是正确的,它不包含属性。对不起,我错过了这个消息。是的,我想那是我最后的选择。。但是我也有一堆属性和子元素,对于原始元素,我也必须移动它们。听起来像是头痛!myXmlElem.ChildNodes[i]将包含属性?是的,它将包含任何类型的节点属性、文本、元素等。@Matt ChildNodes属性不包含属性。如在上运行示例代码所示。在示例中,标题和价格已打印,但ISBN未打印。+1,您是正确的,它不包含属性。对不起,错过了信息。