使用Linq进行分段的XML字符串解析

假设我有一个支离破碎的XML,如下所示。

      

我可以使用XmlReader with Fragment选项来解析这个not complete XML字符串。

 XmlReaderSettings settings = new XmlReaderSettings(); settings.ConformanceLevel = ConformanceLevel.Fragment; XmlReader reader; using (StringReader stringReader = new StringReader(inputXml)) { reader = XmlReader.Create(stringReader, settings); } XPathDocument xPathDoc = new XPathDocument(reader); XPathNavigator rootNode = xPathDoc.CreateNavigator(); XPathNodeIterator pipeUnits = rootNode.SelectChildren("A", string.Empty); while (pipeUnits.MoveNext()) 

我可以使用Linq进行碎片化的XML字符串解析吗?

使用XNode.ReadFrom()方法 ,您可以轻松创建一个返回XNode序列的方法:

 public static IEnumerable ParseXml(string xml) { var settings = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment, IgnoreWhitespace = true }; using (var stringReader = new StringReader(xml)) using (var xmlReader = XmlReader.Create(stringReader, settings)) { xmlReader.MoveToContent(); while (xmlReader.ReadState != ReadState.EndOfFile) { yield return XNode.ReadFrom(xmlReader); } } } 

我不是这个主题的专家,但我不明白为什么这个方法不起作用:

 XDocument doc = XDocument.Parse("" + xmlFragment + ""); 

使用此方法的一件事是您必须记住虚拟节点是文档的根。 显然,您可以始终只查询子节点属性以获取所需的信息。