为了账号安全,请及时绑定邮箱和手机立即绑定

c#从XML标签中删除(空)

c#从XML标签中删除(空)

C#
三国纷争 2021-07-06 17:16:47
我需要找出一种使用 C# 解析 XML 文件的好方法(NULL),并将其从标签中删除,然后将其替换为单词BAD.例如:<GC5_(NULL) DIRTY="False"></GC5_(NULL)>应该替换为<GC5_BAD DIRTY="False"></GC5_BAD>部分问题是我无法控制原始 XML,我只需要在收到它后修复它。第二个问题是(NULL)可以出现在零个、一个或多个标签中。用户是否填写其他字段似乎是一个问题。所以我可能会得到<GC5_(NULL) DIRTY="False"></GC5_(NULL)>或者<MH_OTHSECTION_TXT_(NULL) DIRTY="False"></MH_OTHSECTION_TXT_(NULL)>或者<LCDATA_(NULL) DIRTY="False"></LCDATA_(NULL)>我是 C# 和编程的新手。编辑:所以我想出了以下功能,虽然不漂亮,但到目前为止工作。public static string CleanInvalidXmlChars(string fileText)    {        List<char> charsToSubstitute = new List<char>();        charsToSubstitute.Add((char)0x19);        charsToSubstitute.Add((char)0x1C);        charsToSubstitute.Add((char)0x1D);        foreach (char c in charsToSubstitute)            fileText = fileText.Replace(Convert.ToString(c), string.Empty);        StringBuilder b = new StringBuilder(fileText);        b.Replace("&#x0;", string.Empty);        b.Replace("&#x1C;", string.Empty);        b.Replace("<(null)", "<BAD");        b.Replace("(null)>", "BAD>");        Regex nullMatch = new Regex("<(.+?)_\\(NULL\\)(.+?)>");        String result = nullMatch.Replace(b.ToString(), "<$1_BAD$2>");        result = result.Replace("(NULL)", "BAD");        return result;    }我只能找到 6 或 7 个错误的 XML 文件来测试此代码,但它对每个文件都有效,并且没有删除好的数据。我感谢您的反馈和您的时间。
查看完整描述

2 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

将此 XML 作为字符串读取并执行正则表达式替换是否适合您?喜欢:


Regex nullMatch = new Regex("<(.+?)_\\(NULL\\)(.+?)>");

String processedXmlString = nullMatch.Replace(originalXmlString, "<$1_BAD$2>");


查看完整回答
反对 回复 2021-07-17
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

通常,正则表达式不是处理 XML 文件的正确方式。有一系列正确处理 XML 文件的解决方案 - 您可以继续阅读System.Xml.Linq以获得良好的开端。如果你是一个新手,这当然是你应该在某个时候学习的东西。但是,正如 Ed Plunkett 在评论中指出的那样,您的 XML 实际上并不是 XML:(并且)XML 元素名称中不允许使用字符。


由于您必须将其作为对字符串的操作来执行,因此要使用 Corak 的注释


contentOfXml.Replace("(NULL)", "BAD");

可能是个好主意,但如果任何元素可以包含字符串(NULL)作为其名称以外的任何内容,则会中断。


如果你想要一个正则表达式方法,这可能会很好地工作,但我不确定它是否没有遗漏任何边缘情况:


var regex = new Regex(@"(<\/?[^_]*_)\(NULL\)([^>]*>)");

var result = regex.Replace(contentOfXml, "$1BAD$2");


查看完整回答
反对 回复 2021-07-17
  • 2 回答
  • 0 关注
  • 252 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信