我将XML存储在字符串变量中:
<ItemMasterList><ItemMaster><fpartno>xxx</fpartno><frev>000</frev><fac>Default</fac></ItemMaster></ItemMasterList>
在这里,我想将XML标记<ItemMasterList>
更改为<Masterlist>
。我怎么能这样做?
答案 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;