我需要将 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 元素。<?xml
开头的不是必须的。
明确地说,这仅在 XML 片段不包含多个元素时才有效,因此可以将其视为根元素。否则,它会引发 XmlException,说明“有多个根元素”。例如,以这种方式加载“假设您已经有一个带有子节点的 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的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式 - 将 HTML 转换为有效的 XML 标记 [重复]