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

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

你怎么能把它变成XmlElement

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

【问题讨论】:

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

标签: c# xml type-conversion


【解决方案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);
    

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

    感谢和干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 2011-02-11
      • 2021-07-01
      • 1970-01-01
      • 2012-08-09
      • 2011-10-17
      • 2014-04-24
      相关资源
      最近更新 更多