如何将无根节点XML片段解析为XElement列表且无需加虚拟根或拆分字符串
实现方案
存在完全符合要求的实现方式,不需要修改原XML字符串、也不需要额外添加虚拟根节点,核心是通过调整XML读取器的合规性配置实现片段解析,具体实现逻辑如下:
- 配置
XmlReaderSettings的ConformanceLevel属性为ConformanceLevel.Fragment,该配置允许读取器处理没有统一根节点的XML片段内容 - 基于待解析的XML字符串创建读取流,搭配上述配置生成
XmlReader实例 - 遍历读取器的节点,每次匹配到元素节点时转换为
XElement存入结果列表即可
示例代码(C#)
using System.Xml; using System.Xml.Linq; using System.IO; public List<XElement> ParseRootlessXmlFragment(string xmlFragment) { List<XElement> elementList = new List<XElement>(); XmlReaderSettings readerSettings = new XmlReaderSettings { // 配置为支持解析XML片段,不需要根节点 ConformanceLevel = ConformanceLevel.Fragment }; using (StringReader strReader = new StringReader(xmlFragment)) using (XmlReader xmlReader = XmlReader.Create(strReader, readerSettings)) { // 逐节点读取 while (xmlReader.Read()) { // 仅处理顶层元素节点,可根据需求调整是否过滤注释、空白等节点 if (xmlReader.NodeType == XmlNodeType.Element) { elementList.Add((XElement)XNode.ReadFrom(xmlReader)); } } } return elementList; }
直接传入你给出的示例XML片段即可得到对应两个Item节点的XElement列表。
内容的提问来源于stack exchange,提问作者raznagul
相关产品推荐
相关产品推荐

