2010-09-13 9 views
50

Ich bin auf der Suche nach der einfachsten Möglichkeit, eine Zeichenfolge mit gültigen XML in ein XmlElement Objekt in C# zu konvertieren.Ich muss eine XML-Zeichenfolge in ein XmlElement konvertieren

Wie können Sie dies in eine XmlElement verwandeln?

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

'XmlElement' oder' XElement'? – SLaks

+0

Hat die Zeichenkette ein einzelnes Wurzelelement? – SLaks

+0

Es muss nicht unbedingt ein Wurzelelement sein. – Dean

Antwort

79

verwenden:

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

Vorsicht !! Wenn Sie dieses Element zu einem anderen Dokument hinzufügen müssen, müssen Sie es zunächst mit ImportNode importieren.

+1

With this fail, wenn es am Anfang kein -Tag gibt? Wenn er nur ein XML-Fragment hat, glaube ich nicht, dass das funktionieren wird. –

+2

@Jimmy Hoffa: IIRC LoadXml nimmt jedes wohlgeformte XML-Fragment, das genau ein XML-Element auf der obersten Ebene enthält. ' dtb

+2

Ja, es wird funktionieren, probieren Sie es selbst aus. – Aliostad

13

Verwendung XmlDocument.LoadXml:

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

(Oder falls Sie sich über XElement sprechen, verwenden XDocument.Parse :)

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

Er wollte das Element, und für XElement kann er einfach XElement.Parse (xmlString), aber Sie geben ihm ein Dokument nicht Element. –

+0

@Jimmy Hoffa: Wenn Sie ein Dokument haben, ist es einfach, das Wurzelelement zu bekommen, nein? – dtb

+0

Sicher, wollte nur deine Antwort könnte auf die Poster-Frage etwas mehr zugeschnitten werden, falls es für ihn nicht so einfach ist wie für uns .. –

2

Sie können dafür XmlDocument.LoadXml() verwenden.

Hier ist ein einfaches examle:

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

Danke für Ihre Antwort. – Dean

0

ich mit diesem Code-Schnipsel versucht, haben die Lösung.

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

Wenn Sie eine andere bessere/effizientere Möglichkeit haben, dasselbe zu implementieren, lassen Sie es uns bitte wissen.

Dank & Prost

17

Angenommen, Sie bereits ein XmlDocument mit Kindern Knoten hatte, Und Sie müssen aus Zeichenfolge mehr untergeordnetes Element hinzufügen.

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); 

Das Ergebnis:

<root> 
    <item><name>this is earlier manipulation</name> 
    <item><name>wrench</name></item> 
    <item><name>screwdriver</name> 
</root> 
Verwandte Themen