当前位置:  开发笔记 > 编程语言 > 正文

使用C#更改XML文件中的节点名称

如何解决《使用C#更改XML文件中的节点名称》经验,为你挑选了1个好方法。

我有一大堆XML文件,具有以下结构:


  someContent
  someType


  someContent
  someType


  someContent
  someType

...
...

我需要将每个"Content"节点名称更改为StuffxContent; 基本上将父节点名称添加到内容节点的名称.

我打算用这个XMLDocument课程找出一种方法,但我想我会问是否有更好的方法来做到这一点.



1> Omar..:

(1.)[XmlElement/XmlNode] .Name属性是只读的.

(2.)问题中使用的XML结构是粗略的,可以改进.

(3.)无论如何,这是给定问题的代码解决方案:

String sampleXml =
  ""+
    ""+
      "someContent"+
      "someType"+
    ""+
    ""+
      "someContent"+
      "someType"+
    ""+
    ""+
      "someContent"+
      "someType"+
    ""+
  "";

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(sampleXml);

XmlNodeList stuffNodeList = xmlDoc.SelectNodes("//*[starts-with(name(), 'Stuff')]");

foreach (XmlNode stuffNode in stuffNodeList)
{
    // get existing 'Content' node
    XmlNode contentNode = stuffNode.SelectSingleNode("Content");

    // create new (renamed) Content node
    XmlNode newNode = xmlDoc.CreateElement(contentNode.Name + stuffNode.Name);

    // [if needed] copy existing Content children
    //newNode.InnerXml = stuffNode.InnerXml;

    // replace existing Content node with newly renamed Content node
    stuffNode.InsertBefore(newNode, contentNode);
    stuffNode.RemoveChild(contentNode);
}

//xmlDoc.Save

PS:我来这里寻找一种更好的重命名节点/元素的方法; 我还在寻找.


令人遗憾的是,有51名代表的人比拥有31k代表的人更了解这一点.为你+1,即使它是一个比我希望的稍微复杂的解决方案.
它不会影响提问者的例子,但为了完整性,你的例程不应该仅仅复制到InnerXml,它还应该复制任何属性:for(int i = contentNode.Attributes.Count - 1; i> = 0; i - ){ newNode.Attributes.Prepend((XmlAttribute)contentNode.RemoveAttributeAt(I)); }
推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有