使用C#更改XML文件中的节点名称我有一堆具有以下结构的XML文件:someContentsomeTypesomeContentsomeTypesomeContentsomeType......我需要将每个“内容”节点名称更改为StuffxContent;基本上是将父节点名称添加到内容节点的名称中。我打算使用XMLDocument类并找到一种方法,但我想问一下是否有更好的方法来做到这一点。您提供的XML表明有人完全忽略了XML的要点。而不是让你应该有:/现在你将能够使用Xpath遍历文档(即//stuff[id='1']/content/)节点的名称不应该用于建立身份,您可以使用属性。要执行您要求的操作,请将XML加载到xml文档中,然后简单地遍历第一级子节点以重命名它们。伪代码:foreach(YourDoc.ChildNodes中的XmlNoden){n.ChildNode[0].Name=n.Name+n.ChildNode[0].Name;}YourDoc.Save();但是,我强烈建议您实际修复XML以使其有用,而不是进一步破坏它。(1.)[XmlElement/XmlNode].Name属性是只读的。(2.)问题中使用的XML结构很粗糙,可以改进。(3.)无论如何,这里是给定问题的代码解决方案:StringsampleXml=""+""+"someContent"+"someType"+""+""+"someContent"+"someType"+""+""+"someContent"+"someType"+""+"";XmlDocumentxmlDoc=newXmlDocument();xmlDoc.LoadXml(sampleXml);XmlNodeListstuffNodeList=xmlDoc.SelectNodes("//*[starts-with(name(),'Stuff')]");foreach(XmlNodestuffNodeinstuffNodeList){//获取现有的'Content'节点XmlNodecontentNode=stuffNode.SelectSingleNode("内容");//创建新的(重命名的)内容节点XmlNodenewNode=xmlDoc.CreateElement(contentNode.Name+stuffNode.Name);//[如果需要]复制现有的Contentchildren//newNode.InnerXml=stuffNode.InnerXml;//用新重命名的内容节点替换现有的内容节点stuffNode.InsertBefore(newNode,contentNode);stuffNode.RemoveChild(contentNode);}//xmlDoc.SavePS:我来这里是为了寻找一种更好的重命名节点/元素的方法;我还在找。这是我为RenameNode()方法找到的一些代码:http://www.goodgord.com/2006/10/how-to-rename-xml-node-in-c.html我找到了重命名节点的最简单方法方法是:xmlNode.InnerXmL=newNode.InnerXml.Replace("OldName>","NewName>")不包含开头以确保重命名结束标记。也许更好的解决方案是遍历每个节点,并将信息写入新文档。显然,这将取决于您将来如何使用数据,但我建议使用FlySwat建议的相同格式重新格式化...我还建议使用最近添加的XDocument是创建新文档的最佳方式。我会回答更高的问题:你为什么要用XmlDocument来尝试这个?我认为实现你的目标的最好方法是使用一个简单的XSLT文件来匹配一个“CONTENTSTUFF”节点并输出一个“CONTENT”节点......没有理由得到这么重的枪......无论哪种方式,如果你仍然想要做C#风格,使用XmlReader+XmlWriter而不是XmlDocument用于内存和速度目的。XmlDocument将整个XML存储在内存中并使其在遍历时非常繁重...如果您多次访问该元素,XmlDocument就可以了(这里不是这种情况)。将其加载为字符串并在整个批次上进行替换。.以上是C#学习教程:使用C#更改XML文件中的节点名称分享所有内容,如果对大家有用还需要了解更多关于C#学习教程,希望大家多多关注---StringsampleXml=""+""+"someContent"+"someType"+""+""+"someContent"+"someType"+""+""+“一些内容”+“一些类型”+“”+“”;sampleXml=sampleXml.Replace("Content","StuffxContent")本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
