2010-09-13 31 views
50

我正在尋找最簡單的方法將包含有效XML的字符串轉換爲C#中的XmlElement對象。我需要將XML字符串轉換爲XmlElement

你怎麼能把它變成XmlElement

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

'XmlElement'或'XElement'? – SLaks 2010-09-13 18:08:28

+0

字符串是否有單個根元素? – SLaks 2010-09-13 18:15:59

+0

它不一定有根元素。 – Dean 2010-09-13 18:22:40

回答

79

使用此:

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

當心! 如果您需要首先將此元素添加到其他文檔,則需要使用ImportNode導入它。

+1

如果在開始時沒有<?xml版本的bla bla>標籤,那麼不會失敗嗎?如果他只有一個xml片段,我認爲這不會起作用。 – 2010-09-13 18:14:19

+2

@Jimmy Hoffa:IIRC LoadXml採用任何格式正確的XML片段,其中包含頂層的一個XML元素。開始時不需要「<?xml」。 – dtb 2010-09-13 18:17:32

+2

是的,它會工作,自己嘗試。 – Aliostad 2010-09-13 18:17:43

13

使用XmlDocument.LoadXml

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

(或者如果你在談論的XElement,使用XDocument.Parse :)

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

他想要這個元素,而對於XElement,他可以只做XElement.Parse(xmlString),但是你給他的文檔不是元素。 – 2010-09-13 18:13:07

+0

@Jimmy Hoffa:如果你有一個文檔,直接獲取根元素,不是嗎? – dtb 2010-09-13 18:14:29

+0

當然,只是說你的答案可以適合海報的問題多一點,以防他對我們來說不那麼容易.. – 2010-09-13 18:18:22

2

您可以使用XmlDocument.LoadXml()來執行此操作。

下面是一個簡單examle:

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

感謝您的回覆。 – Dean 2010-09-13 18:24:30

0

我想在這個片段中,得到了解決。

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

如果還有其他更好的/有效的方法來實施,請告訴我們。

感謝&乾杯

17

假設你已經與孩子節點XmlDocument的,你需要從字符串添加更多的子元素。

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

結果:

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