我有一个以xml元素开头的字符串,然后在Element结束后继续使用常规文本。
像这样:
<SomeElement SomeAtt="SomeValue"><SomeChild/></SomeElement> More random text.
我想将第一部分解析为XElement,然后将以下文本分离为字符串变量。 我考虑过只计算anglebrackets,但是有合法的XML可以让我失望。 我更喜欢使用开箱即用的解析器。 我尝试过使用XmlReader和XElement.Parse方法。我希望它们在读取元素后停止,而不是因为Xml元素之后的意外文本而抛出异常。到目前为止我还没能到达。 XmlReader有一个ReadSubtree方法,但我无法使它工作。
有什么想法吗?
修改
答案 0 :(得分:4)
一种可能的简单方法可能是将整个字符串包装在根节点中,以使其成为有效的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.
答案 1 :(得分:0)
您的XML需要一个标识行(正常的第一行),并且只有一个根节点对XMLReader有效且无错误地读取。