我需要将一个XML字符串转换为一个XmlElement。

67

我正在寻找将包含有效XML的字符串转换为C#中的XmlElement对象的最简单方法。

你如何将其转换为XmlElement

<item><name>wrench</name></item>

字符串是否具有单个根元素? - SLaks
它不一定有根元素。 - Dean
1
如今在.NET中处理这个问题仍然非常愚蠢。当你无法控制的WSDL在svcutil生成代理后需要XmlElement[]时,你会被迫使用奇怪的方法。 - StingyJack
发现另一个帖子有更多的解决方案:https://dev59.com/8m865IYBdhLWcg3wM7q0 - Druthipriya KL
5个回答

107

使用这个:

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

注意!如果您需要将此元素添加到另一个文档中,首先需要使用ImportNode导入它。


1
如果开头没有<?xml version bla bla>标签,这个会失败吗?如果他只有一个xml片段,我认为这不会起作用... - Jimmy Hoffa
2
@Jimmy Hoffa:如果我没记错,LoadXml可以接受任何格式良好的XML片段,该片段在顶层恰好包含一个XML元素。开头的<?xml不是必需的。 - dtb
要明确的是,这仅在XML片段不包含多个元素时才有效,因此它可以被视为根元素。否则,它会抛出一个XmlException,指出“存在多个根元素”。例如,以这种方式加载“<item/> <item/>”将失败。 - Suncat2000

27

假设您已经有了一个带有子节点的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>

1
这似乎是根据微软文档的规范正确的方式。我不知道为什么它不是首选解决方案。 - user430788

15
使用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;

2
他需要元素,对于XElement,他只需执行XElement.Parse(xmlString),但你给了他一个文档而不是元素。 - Jimmy Hoffa
@Jimmy Hoffa:如果你有一个文档,获取根元素是很简单的,不是吗? - dtb
当然,我只是在说你的回答可以更加针对发帖者的问题,以防他觉得这并不像我们想象中的那么容易。 - Jimmy Hoffa

2
您可以使用XmlDocument.LoadXml()来完成此操作。
以下是一个简单的示例:
XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.LoadXml("YOUR XML STRING"); 

1

我用了这段代码,得到了解决方案。

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

如果有更好/更有效的实现方式,请告诉我们。

谢谢 & 干杯


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接