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

Posted

技术标签:

【中文标题】我需要将 XML 字符串转换为 XmlElement【英文标题】:I need to convert an XML string into an XmlElement 【发布时间】:2011-04-11 19:32:36 【问题描述】:

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

你怎么能把它变成XmlElement

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

【问题讨论】:

字符串是否只有一个根元素? 不一定有根元素。 今天在 .NET 中的处理方式仍然令人沮丧地愚蠢。当你无法控制的 WSDL 在 svcutil 生成你的代理之后想要XmlElement[] 时,你有点强迫症。 找到另一个线程,提供更多解决方案:***.com/questions/3936056/… 【参考方案1】:

使用这个:

private static XmlElement GetElement(string xml)

    XmlDocument doc = new XmlDocument();
    doc.LoadXml(xml);
    return doc.DocumentElement;

小心!! 如果您需要先将此元素添加到另一个文档,则需要使用 ImportNode 导入它。

【讨论】:

如果开头没有 标签会不会失败?如果他只有一个 xml 片段,我认为这不会起作用.. @Jimmy Hoffa:IIRC LoadXml 采用任何格式良好的 XML 片段,该片段在顶层仅包含一个 XML 元素。 &lt;?xml开头的不是必须的。 明确地说,这仅在 XML 片段不包含多个元素时才有效,因此可以将其视为根元素。否则,它会引发 XmlException,说明“有多个根元素”。例如,以这种方式加载“”会失败。【参考方案2】:

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

【讨论】:

根据 Ms docs,这似乎是规范正确的方法。我不知道为什么它不是首选解决方案【参考方案3】:

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

【讨论】:

他想要元素,而对于 XElement,他可以做 XElement.Parse(xmlString),但你给他的是文档而不是元素。 @Jimmy Hoffa:如果你有一个文档,获取根元素很简单,不是吗? 当然,我只是说你的答案可以根据发帖者的问题稍微调整一下,以防他不像我们那样容易..【参考方案4】:

您可以使用 XmlDocument.LoadXml() 来执行此操作。

这是一个简单的例子:

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

【讨论】:

【参考方案5】:

我用这个 sn-p 试过了,得到了解决方案。

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

如果有任何其他更好/更有效的方法来实现相同的,请告诉我们。

感谢和干杯

【讨论】:

以上是关于我需要将 XML 字符串转换为 XmlElement的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C#/LINQ 将 XML 转换为 JSON?

如何使用 PHP 将 HTML 转换为 XML-TEI?

将字符串转换为 xml 节点

正则表达式 - 将 HTML 转换为有效的 XML 标记 [重复]

如何将带有参数数组的字符串 xml 转换为 .NET Core 中的对象

PHP递归函数将多维数组转换为xml