You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:30:46