【问题标题】:change XmlElement Name property更改 XmlElement 名称属性
【发布时间】:2023-03-02 21:44:02
【问题描述】:

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

我想做myXmlElem.Name = "xyz",但编译器告诉我不能对 Name 属性进行设置操作。

<abc/>

改为

<xyz/>

我怎样才能做到这一点?

谢谢!

【问题讨论】:

    标签: c# xml replace c++-cli


    【解决方案1】:

    您不能像那样更改 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);
    

    【讨论】:

    • 是的,我认为这是我最后的手段了.. 但我也有一些原始元素的属性和子元素,我也必须移动过去。听起来很头疼!
    • myXmlElem.ChildNodes[i] 将包含属性?
    • 是的,它将包括任何类型的节点(属性、文本、元素等...)
    • @Matt ChildNodes 属性包含属性。可以通过在ChildNodes MSDN page 上运行示例代码来演示。在提供的示例中,打印了标题和价格,但没有打印 ISBN。
    • +1,你是对的,它不会包含属性。很抱歉错过了信息。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-01-18
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 2017-06-24
      相关资源
      最近更新 更多