c# - 在 .net 框架上使用与号 (&) 和 <、> 解析 XML(无法控制源代码)
问题描述
我们有一系列来自大型机程序的 XML 数据文件。这些由下游的 .Net 进程解析。一些内部文本字段包含需要转义的 & 等字符
不幸的是,我们实际上无法修复所有程序。当出现错误的 &、> 或 < 时.. 解决方法是要求用户编辑主机数据并拼出字符!所以像这个答案这样的解决方案是行不通的。
一些程序正确地转义了它们的 xml,例如,它们将数据中的 & 替换为&
并转义了 < 和 >。所以像这个答案这样的解决方案也不起作用!
我可以做的一件事是编写一个遵循如下规则的预处理器:
放大器策略:
考虑一个 & 后跟字符和 ; 没有空格的转义序列
在单独的 xml dom 中测试它
如果有效,请离开
如果没有,请使用 & 转义
&
gt/lt 战略
跟踪您看到的最后一个标签。
如果您在标签之外看到 > ,请使用
>
如果您在标签之外看到 <,这会有点困难
提前阅读并寻找关闭>
如果它之前没有 / (此后没有非空格),则添加一个
尝试在一个新的 dom 中解析它(比解析间距、属性、输入/输出等更容易)
错误 - 逃避它。
不要误会我的意思,实现我的预处理器将是一种有趣的编码体验,但我很忙,回归测试、修复我忘记的东西,并使其成熟会破坏我们对这个项目的预算。
幸运的是,我们看到在现代 HTML 中,这已经实现了。正如马克在我的一个链接答案中评论的那样,“HTML5 允许您不转义,但仅当随后的数据看起来不像有效的字符引用时”。所以:
<html> you & i </html>
-> 你和我
但
<html> you & i </html>
-> 你和我
乃至
<html> you &zz; i </html>
-> 你 &zz; 一世
所以我的问题是,.net 框架(或.Net、核心或标准)中的任何 xml 解析器是否允许打开此行为,即遵守现有的有效转义序列,但如果不是有效,允许它作为文字?
真诚感谢您的帮助:-)
解决方案
推荐阅读
- asp.net-mvc - Invoke-WebRequest:请求被中止:无法创建 SSL/TLS 安全通道
- terraform - Terraform 资源重新创建动态 AWS RDS 实例计数
- java - Optional ofNullable 中的字符串值
- visual-studio-code - 文件夹不被排除在 vs 代码搜索之外
- tensorflow - 零损失张量是否也反向传播?
- ruby - 如何在 AWS Lambda 中正确加载 gem 扩展
- c++ - 将分配内存的前 16 个字节转换为 UDT
- asp.net - 强制从 https 重定向到 http .net core 2.1
- yocto - 何时修改 Poky 与创建新发行版
- c# - C#。如何为表单中的所有标签赋予相同的名称,所以如果一个对象与其中一个标签绑定,它将显示一些东西