运行以下代码时:
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)如何解决此问题的任何想法?谢谢!
答案 0 :(得分:6)
虽然右尖括号在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>
答案 1 :(得分:2)
文本节点值中>
和>
之间的XML没有区别。因此,XML解析器/ DOM可以自由地以任何形式表示值。
请注意,XML中有其他规范化(空格和新行)几乎可以保证保存的XML不会逐字节地与源XML相同。
如果您真的需要保持>
完整使用CDATA,即使这样也可以保证不会触及文字 - 有些解析器可能会让您保留>
而不是转换为>
在保存。
真正的解决方案是接受以下事实:在保存时,某些字符将被编码(包括非ASCII字符,如果使用不直接支持的编码保存)以生成有效的XML。