XmlDocument.Load Replacing ">"
本文关键字:quot gt Load Replacing XmlDocument | 更新日期: 2023-09-27 17:59:26
运行以下代码时:
static void Main(string[] args)
{
var xmlDoc = new XmlDocument();
var fileReader = new BinaryReader(File.Open(@"C:'Users'username'Desktop'doc.xlf",FileMode.Open,FileAccess.Read,FileShare.Read));
var sourceStream = new MemoryStream(fileReader.ReadBytes((int)fileReader.BaseStream.Length));
xmlDoc.Load(sourceStream);
}
在具有如下节点的文件上:
<source xml:lang="en-us">
<b>This text is displayed in Bold.</b><br>
<i>This text is displayed in italics.</i>
</source>
节点在读取时会转换为以下内容:
<source xml:lang="en-us">
<b>This text is displayed in Bold.</b><br>
<i>This text is displayed in italics.</i>
</source>
换句话说,所有>
都被>
取代
通常情况下,这是可以的(我甚至认为这在技术上是合法的,即使是糟糕的做法),但在这种情况下,绝对必须在读入节点时不要更改它。对(1)如何读入xml以允许>
或(2)如何解决这个问题有什么想法吗?谢谢
尽管直角括号在XML中是合法的,但XmlDocument
上没有任何选项可以避免将其更改为相应的实体。
您可以使用CDATA部分:
<source xml:lang="en-us">
<![CDATA[<b>This text is displayed in Bold.</b><br>
<i>This text is displayed in italics.</i>]]>
</source>
在XML中,>
和>
的文本节点值没有差异。因此,XML解析器/DOM可以自由地以任意一种形式表示它认为合适的值。
请注意,XML中还有其他规范化(空白和新行),几乎可以保证保存的XML不会与源XML逐字节相同。
如果您真的需要保持>
的完整性,请尝试使用CDATA,即使这样也可以保证文本不会被触摸——一些解析器可能会让您保留>
,而不是在保存时转换为>
。
真正的解决方案是接受这样一个事实,即某些字符将在保存时进行编码(如果使用不直接支持的编码保存,则包括非ASCII字符),以生成有效的XML。