使用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 + " ");
使用此方法的一件事是您必须记住虚拟节点是文档的根。 显然,您可以始终只查询子节点属性以获取所需的信息。