2

次のコードを実行する場合:

 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">
        &lt;b>This text is displayed in Bold.&lt;/b>&lt;br>
        &lt;i>This text is displayed in italics.&lt;/i>
</source>

ノードは、読み込まれると次のように変換されます。

<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>

言い換えれば、すべて>がに置き換えられています&gt;

通常は問題ありませんが(悪い習慣があっても技術的に合法であるという印象もあります)、この場合、ノードが読み込まれたときにノードが変更されないことが絶対に必要です。 1)xmlを読み込んで許可する方法、>または(2)この問題を回避する方法 ありがとう!

4

2 に答える 2

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>
于 2013-02-14T16:23:55.483 に答える
2

XMLでは、テキスト ノードの&gt;との値に違いはありません。>したがって、XML パーサー/DOM は、適切と思われる形式で自由に値を表現できます。

XML には他の正規化 (空白と改行) があり、保存された XML がバイト単位でソース XML と同一にならないことがほぼ保証されていることに注意してください。

本当にそのままにしておく必要がある場合は>、CDATA を使用してみてください。これにより、テキストが変更されないことが保証されます。パーサーによっては、保存>時に変換する代わりに&gt;保存できる場合があります。

実際の解決策は、有効な XML を生成するために、保存時に一部の文字 (直接サポートされていないエンコーディングで保存された場合は非 ASCII 文字を含む) がエンコードされるという事実を受け入れることです。

于 2013-02-14T16:42:44.177 に答える