我需要读取一个 XML 文件,其中包含 某些节点内容中的字符,我需要按原样保留这些字符并避免将它们转换为新行。这些节点具有 xmldsig 签名并转换 换行中的字符会使签名无效。
我尝试使用 XmlDocument.Load、XmlReader、StreamReader 加载 XML,特殊字符最终转换为新行。
使用 XML 示例更新
<?xml version="1.0"?>
<catalog>
<book>
<description>description
with
several
lines
</description>
</book>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
...
</Signature>
</catalog>
如果 CR 字符是文字 0x0D 字节,则根据 XML 建议中标准化行结尾的规则,任何符合规范的 XML 解析器都必须删除这些字符或将它们转换为换行符:请参阅 https://www.w3.org/TR /REC-xml/#sec-line-ends.
通常,XML 文件的任何处理都会在二进制级别进行更改,例如属性之间的空格将丢失。您期望可以解析和序列化 XML 文件,同时保留其二进制表示形式,这是根本错误的。
但是,XML 数字签名的算法会小心地忽略此类变化。它在逻辑级别上工作,并且应该忽略诸如开始标记内的空格或行结尾的精确表示之类的事情。你说将 CR 转换为 NL 会使签名无效:这对我来说听起来是错误的。签名应该不受影响。
@Y0rd4nis 你找到这个问题的解决方案了吗?
有几种方法可以读取内容中包含回车符
的 XML 文件:
使用支持
作为行结束符的 XML 解析器。
使用支持
作为行结束符的文本编辑器。
使用可以将
转换为不同行结束字符的工具。