XmlDocument.Load替换">"

nos*_*hcd 2 c# xml

运行以下代码时:

 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);
    }
Run Code Online (Sandbox Code Playgroud)

在具有如下所示节点的文件上:

<source xml:lang="en-us">
        &lt;b>This text is displayed in Bold.&lt;/b>&lt;br>
        &lt;i>This text is displayed in italics.&lt;/i>
</source>
Run Code Online (Sandbox Code Playgroud)

读入时,节点将转换为以下内容:

<source xml:lang="en-us">
        &lt;b&gt;This text is displayed in Bold.&lt;/b&gt;&lt;br&gt;
        &lt;i&gt;This text is displayed in italics.&lt;/i&gt;
</source>
Run Code Online (Sandbox Code Playgroud)

换句话说,所有人>都被替换了&gt;

通常情况下这是可以的(我甚至认为它在技术上是合法的,即使是不好的做法),但在这种情况下,当读入时节点不会改变是绝对必要的.任何想法都是( 1)如何在xml中读取>或允许(2)如何解决这个问题?谢谢!

Dan*_*rth 6

虽然右尖括号在XML中是合法的,但是没有选项XmlDocument可以避免将其更改为相应的实体.

您可以使用CDATA部分:

<source xml:lang="en-us">
    <![CDATA[&lt;b>This text is displayed in Bold.&lt;/b>&lt;br>
&lt;i>This text is displayed in italics.&lt;/i>]]>
</source>
Run Code Online (Sandbox Code Playgroud)

  • +1.请注意,有2个标准化(一个在读取,一个在写入),即使除了加载和保存XML之外什么都不做.XML解析器*不保证原始和保存的XML是逐字节的相同,只是从XML的角度来看是相同的.甚至属性也可以重新排列(理论上). (2认同)