c# - 从较大的字符串中提取 Xml 元素

标签 c# xml linq-to-xml

我有一个以 xml 元素开头的字符串,然后在该元素结束后继续处理常规文本。

像这样:

<SomeElement SomeAtt="SomeValue"><SomeChild/></SomeElement> More random text.

我想将第一部分解析为 XElement,然后将以下文本分离为字符串变量。 我考虑过只计算尖括号,但有合法的 XML 会让我失望。 我更愿意使用开箱即用的解析器。 我试过使用 XmlReader 和 XElement.Parse 方法。我希望它们在读取元素后停止,而不是因为 Xml 元素后的意外文本而抛出异常。到目前为止我还做不到。 XmlReader 有一个 ReadSubtree 方法,但我无法让它工作。

有什么想法吗?

编辑

  • 附加信息:随机文本可能包含尖括号。
  • 附加信息:从概念上讲,XML 可能包含 xml 注释,其中可能包含不匹配的括号。因此,为了普遍适用,解决方案最好考虑到这一点,但在我的具体情况下不是必需的。

最佳答案

一种可能的简单方法是将整个字符串包装在根节点中,使其成为有效的 XML 并可由 XElementXDocument 解析:

var xml = @"<SomeElement SomeAtt=""SomeValue""><SomeChild/></SomeElement> More random text.";
xml = string.Format("<root>{0}</root>", xml);
var doc = XDocument.Parse(xml);
var element = doc.Root.Elements().First();
var trailingString = doc.Root.LastNode;

Console.WriteLine(element.ToString());
Console.WriteLine();
Console.WriteLine(trailingString.ToString());

控制台输出:

<SomeElement SomeAtt="SomeValue">
  <SomeChild />
</SomeElement>

 More random text.

关于c# - 从较大的字符串中提取 Xml 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29871507/

相关文章:

c# - 如何将接口(interface)用作 C# 泛型类型约束?

c# - 当我想在我的类/方法中使用不同类型时,是否有比泛型更好的 Ant 设计解决方案

xml - 如果使用标准 linux 工具包含特定字符串,如何从 xml 文件中提取整个记录

c# - 如何获取这些 xml 值的字符串数组?

c# - Webbrowser.DocumentStream 或 Webbrowser.DocumentText 不工作?

.net - .NET 中 XPath id() 的替代方案

c# - XNA 4.0 - Alpha 和多个纹理......搞砸了

c# - 将 MouseHover/MouseLeave 规则应用于表单中的所有链接

XML 差异的 JavaScript 实现

c# - System.Xml.XmlException : Data at the root level is invalid. 第 1 行,位置 1 - 有效的 XML 文件?