更改XML根元素名称

时间:2010-08-30 14:22:19

标签: c#

我将XML存储在字符串变量中:

<ItemMasterList><ItemMaster><fpartno>xxx</fpartno><frev>000</frev><fac>Default</fac></ItemMaster></ItemMasterList>

在这里,我想将XML标记<ItemMasterList>更改为<Masterlist>。我怎么能这样做?

5 个答案:

答案 0 :(得分:11)

System.Xml.XmlDocument以及相同名称空间中的关联类在这里对您来说非常宝贵。

XmlDocument doc = new XmlDocument();
doc.LoadXml(yourString);
XmlDocument docNew = new XmlDocument();
XmlElement newRoot = docNew.CreateElement("MasterList");
docNew.AppendChild(newRoot);
newRoot.InnerXml = doc.DocumentElement.InnerXml;
String xml = docNew.OuterXml;

答案 1 :(得分:6)

您可以使用LINQ to XML来解析XML字符串,创建新根并将原始根的子元素和属性添加到新根:

XDocument doc = XDocument.Parse("<ItemMasterList>...</ItemMasterList>");

XDocument result = new XDocument(
    new XElement("Masterlist", doc.Root.Attributes(), doc.Root.Nodes()));

答案 2 :(得分:6)

我知道我有点晚了,但只是必须添加这个答案,因为似乎没有人知道这个。

XDocument doc = XDocument.Parse("<ItemMasterList><ItemMaster><fpartno>xxx</fpartno><frev>000</frev><fac>Default</fac></ItemMaster></ItemMasterList>");    
doc.Root.Name = "MasterList";

返回以下内容:

<MasterList>
  <ItemMaster>
    <fpartno>xxx</fpartno>
    <frev>000</frev>
    <fac>Default</fac>
  </ItemMaster>
</MasterList>

答案 3 :(得分:0)

使用XmlDocument方式,您可以按照以下方式执行此操作(并保持树完好无损):

XmlDocument oldDoc = new XmlDocument();
oldDoc.LoadXml("<ItemMasterList><ItemMaster><fpartno>xxx</fpartno><frev>000</frev><fac>Default</fac></ItemMaster></ItemMasterList>");
XmlNode node = oldDoc.SelectSingleNode("ItemMasterList");

XmlDocument newDoc = new XmlDocument();
XmlElement ele = newDoc.CreateElement("MasterList");
ele.InnerXml = node.InnerXml;

如果您现在使用ele.OuterXml将返回:(您只需要字符串,否则使用XmlDocument.AppendChild(ele),您将能够再使用XmlDocument个对象)

<MasterList>
  <ItemMaster>
     <fpartno>xxx</fpartno>
     <frev>000</frev>
     <fac>Default</fac>
  </ItemMaster>
</MasterList>

答案 4 :(得分:0)

正如Will A所指出的,我们可以这样做,但是对于InnerXml等于OuterXml的情况,下面的解决方案将会解决:

// Create a new Xml doc object with root node as "NewRootNode" and 
// copy the inner content from old doc object using the LastChild.
                    XmlDocument docNew = new XmlDocument();
                    XmlElement newRoot = docNew.CreateElement("NewRootNode");
                    docNew.AppendChild(newRoot);
// The below line solves the InnerXml equals the OuterXml Problem
                    newRoot.InnerXml = oldDoc.LastChild.InnerXml;
                    string xmlText = docNew.OuterXml;