2010-09-13 13 views
50

Estoy buscando la forma más sencilla de convertir una cadena que contiene XML válido en un objeto XmlElement en C#.Necesito convertir una cadena XML en un XmlElement

¿Cómo se puede convertir esto en XmlElement?

<item><name>wrench</name></item> 
+2

'' XmlElement' o XElement'? – SLaks

+0

¿La cadena tiene un único elemento raíz? – SLaks

+0

No tiene necesariamente un elemento raíz. – Dean

Respuesta

79

Utilice esta:

private static XmlElement GetElement(string xml) 
{ 
    XmlDocument doc = new XmlDocument(); 
    doc.LoadXml(xml); 
    return doc.DocumentElement; 
} 

Cuidado !! Si necesita agregar este elemento a otro documento primero, debe Importarlo usando ImportNode.

+1

¿Esto no funciona si no hay una etiqueta al principio? Si solo tiene un fragmento xml, no creo que funcione ... –

+2

@Jimmy Hoffa: IIRC LoadXml toma cualquier fragmento XML bien formado que contenga exactamente un elemento XML en el nivel superior. ' dtb

+2

Sí, funcionará, pruébelo usted mismo. – Aliostad

13

Uso XmlDocument.LoadXml:

XmlDocument doc = new XmlDocument(); 
doc.LoadXml("<item><name>wrench</name></item>"); 
XmlElement root = doc.DocumentElement; 

(O en caso de que estas hablando XElement, utilice XDocument.Parse :)

XDocument doc = XDocument.Parse("<item><name>wrench</name></item>"); 
XElement root = doc.Root; 
+1

Él quería el elemento, y para XElement solo puede hacer XElement.Parse (xmlString), pero le está dando un documento no elemento. –

+0

@Jimmy Hoffa: si tiene un documento, es fácil obtener el elemento raíz, ¿no? – dtb

+0

Claro, solo estaba diciendo que su respuesta podría adaptarse a la pregunta de los carteles un poco más en caso de que no sea tan fácil para él como lo es para nosotros ... –

2

Puede usar XmlDocument.LoadXml() para hacer esto.

Aquí es una examle simple:

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.LoadXml("YOUR XML STRING"); 
+0

Gracias por su respuesta. – Dean

0

he intentado con este fragmento, consiguió la solución.

// Sample string in the XML format 
String s = "<Result> No Records found !<Result/>"; 
// Create the instance of XmlDocument 
XmlDocument doc = new XmlDocument(); 
// Loads the XML from the string 
doc.LoadXml(s); 
// Returns the XMLElement of the loaded XML String 
XmlElement xe = doc.DocumentElement; 
// Print the xe 
Console.out.println("Result :" + xe); 

Si hay alguna otra forma mejor/más eficiente para implementar la misma, por favor háganos saber.

Gracias Saludos &

17

Supongamos que ya tenía un XmlDocument con nodos hijos, y hay que añadir más elemento secundario de cadena.

XmlDocument xmlDoc = new XmlDocument(); 
// Add some child nodes manipulation in earlier 
// .. 

// Add more child nodes to existing XmlDocument from xml string 
string strXml = 
    @"<item><name>wrench</name></item> 
    <item><name>screwdriver</name></item>"; 
XmlDocumentFragment xmlDocFragment = xmlDoc.CreateDocumentFragment(); 
xmlDocFragment.InnerXml = strXml; 
xmlDoc.SelectSingleNode("root").AppendChild(xmlDocFragment); 

El resultado:

<root> 
    <item><name>this is earlier manipulation</name> 
    <item><name>wrench</name></item> 
    <item><name>screwdriver</name> 
</root> 
Cuestiones relacionadas