[英]How can I stop XDocument from resolving my character entities
我正在閱讀 XML 並以各種方式處理數據。 但是,許多 XML 文檔包含 ISO 字符實體。 我需要保留這些作為它們的實體代碼,但是當 XDocument 讀取 XML 文件時,它會立即將實體解析為它們各自的符號。
我怎樣才能防止這種情況發生?
這是 XML 的一個非常小的樣本,表中列出了 5 個實體。 我需要讀取文件但保留實體代碼:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<table>
<title>iso-amsa.ent</title>
<tgroup cols="3">
<colspec colname="col1" colwidth="0.50*"/>
<colspec colname="col2" align="center" colwidth="0.40*"/>
<colspec colname="col3" colwidth="2.20*"/>
<thead>
<row><entry><para>ISO Entity Name</para></entry><entry><para>Unicode Entity</para></entry><entry><para>Description</para></entry></row>
</thead>
<tbody>
<row><entry><para>cularr</para></entry><entry><para>↶</para></entry><entry><para>ANTICLOCKWISE TOP SEMICIRCLE ARROW</para></entry></row>
<row><entry><para>curarr</para></entry><entry><para>↷</para></entry><entry><para>CLOCKWISE TOP SEMICIRCLE ARROW</para></entry></row>
<row><entry><para>dArr</para></entry><entry><para>⇓</para></entry><entry><para>DOWNWARDS DOUBLE ARROW</para></entry></row>
<row><entry><para>darr2</para></entry><entry><para>⇊</para></entry><entry><para>DOWNWARDS PAIRED ARROWS</para></entry></row>
<row><entry><para>dharl</para></entry><entry><para>⇃</para></entry><entry><para>DOWNWARDS HARPOON WITH BARB LEFTWARDS</para></entry></row>
</tbody>
</tgroup>
</table>
</doc>
這是我讀取文件的非常簡單的方法(但我嘗試了各種方法):
string fileName = "C:\MyTestFile.xml";
XDocument _doc = XDocument.Load(fileName);
一旦讀取 XML,它就會將實體轉換為它們的符號。
我怎樣才能防止這種情況發生?
加載 XML 后, XDocument
不會保留文本編碼。 編碼是base stream的一部分,沒有加載XML。
如果要在將 XML 另存為字符串時對這些實體進行重新編碼,則需要使用帶有Encoding
的XmlWriter
例如,使用MemoryStream
var ms = new MemoryStream();
using (var writer = XmlWriter.Create(ms, new XmlWriterSettings {Encoding = Encoding.ASCII}))
{
_doc.Save(writer);
}
Console.WriteLine(Encoding.ASCII.GetString(ms.GetBuffer(), 0, ms.Length));
或者使用FileStream
using (var fs = new FileStream(@"somePathHere", FileMode.OpenOrCreate, FileAccess.Write))
using (var writer = XmlWriter.Create(fs, new XmlWriterSettings {Encoding = Encoding.ASCII}))
{
_doc.Save(writer);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.