2010-08-30 17 views
6

he XML almacenado en la variable de cadena:Cambio raíz XML nombre del elemento

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

Aquí quiero cambiar etiqueta XML <ItemMasterList> a <Masterlist>. ¿Cómo puedo hacer esto?

+1

usted debe enviar un bit del código que está utilizando, ya que hay más de una manera de hacer esto. –

Respuesta

10

System.Xml.XmlDocument y las clases asociadas en ese mismo espacio de nombres serán invaluables para usted aquí.

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; 
+0

podría darme el código. – Pradeep

+1

Modificado para incluir un ejemplo. –

+2

-1 - Propiedad de solo lectura. –

6

Puede utilizar LINQ to XML analizar la cadena XML, crear una nueva raíz y añadir los elementos secundarios y los atributos de la raíz original a la nueva raíz:

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

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

+1, mantiene intactos los atributos de la raíz – Blorgbeard

0

Utilizando el camino XmlDocument, se puede hacerlo de la siguiente manera (y mantener intacto el árbol):

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; 

Si ahora utiliza ele.OuterXml es devolverá: (que sólo tiene la cadena, de lo contrario nos e XmlDocument.AppendChild(ele) y usted será capaz de utilizar el objeto XmlDocument algunos más)

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

Como se señaló por Will A, podemos hacerlo de esa manera, pero para el caso en que InnerXml es igual a la OuterXml la siguiente solución a trabajar a cabo:

// 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; 
6

Sé que soy un poco tarde, pero solo tengo que agregar esta respuesta ya que nadie parece saber sobre esto.

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

que devuelve el siguiente:

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

, hace exactamente el cambio de nombre, deja todo lo demás intacto. – Horia

Cuestiones relacionadas