我有一个以 xml 元素开头的字符串,然后在该元素结束后继续处理常规文本。
像这样:
<SomeElement SomeAtt="SomeValue"><SomeChild/></SomeElement> More random text.
我想将第一部分解析为 XElement,然后将以下文本分离为字符串变量。 我考虑过只计算尖括号,但有合法的 XML 会让我失望。 我更愿意使用开箱即用的解析器。 我试过使用 XmlReader 和 XElement.Parse 方法。我希望它们在读取元素后停止,而不是因为 Xml 元素后的意外文本而抛出异常。到目前为止我还做不到。 XmlReader 有一个 ReadSubtree 方法,但我无法让它工作。
有什么想法吗?
编辑
- 附加信息:随机文本可能包含尖括号。
- 附加信息:从概念上讲,XML 可能包含 xml 注释,其中可能包含不匹配的括号。因此,为了普遍适用,解决方案最好考虑到这一点,但在我的具体情况下不是必需的。
最佳答案
一种可能的简单方法是将整个字符串包装在根节点中,使其成为有效的 XML 并可由 XElement
或 XDocument
解析:
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/