2010-09-13 28 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>