如何在C#中移除XML字符串中多余的>字符
解决XML根级数据错误:移除多余字符及修复格式
你的XML字符串末尾存在**多余的>字符**(>),这是导致XmlDocument.LoadXml`解析失败、出现根级数据错误的直接原因。此外,XML中的非法特殊字符也会干扰正常解析,以下是具体的修复方案:
修复步骤与优化代码
1. 移除标签末尾的多余>`
针对当前XML的格式错误,通过正则匹配并移除闭合标签后多余的>,同时适配其他类似的多余符号情况。
2. 清理非法特殊字符
过滤XML标准不允许的控制字符或特殊符号,仅保留合法的XML字符范围。
3. 完善反序列化逻辑
原代码中XmlSerializer未实际使用,补充这部分逻辑完成XML到目标模型的转换。
优化后的完整代码:
public T ConvertXmlFromByte<T>(byte[] data) { T model = default(T); try { if (data != null && data.Length > 0) { string xml = Encoding.UTF8.GetString(data); // 移除闭合标签后多余的>(适配类似格式错误) xml = Regex.Replace(xml, @"(</[^>]+>)>", "$1"); // 清理XML非法特殊字符,保留合法范围的字符 xml = Regex.Replace(xml, @"[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-\x10FFFF]", string.Empty); // 反序列化为目标类型 XmlSerializer serializer = new XmlSerializer(typeof(T)); using (StringReader reader = new StringReader(xml)) { model = (T)serializer.Deserialize(reader); } } } catch (Exception ex) { _customLogger.Error(ex.Message, ex); } return model; }
关键说明
- 正则
@"(</[^>]+>)>":精准匹配</XXX>>格式的错误标签,替换为正确的</XXX>。 - 非法字符过滤正则:严格遵循XML规范,保留所有合法的可显示和控制字符,避免解析时抛出异常。
- 补充
StringReader和Deserialize逻辑:完成从XML字符串到目标模型的转换,解决原代码仅解析XML但未生成返回对象的问题。
内容的提问来源于stack exchange,提问作者Vishal Kiri
相关产品推荐
相关产品推荐

