簡體   English   中英

XmlWriter.WriteNode(XmlReader)使用內存流寫入無效的XML

[英]XmlWriter.WriteNode(XmlReader) writes invalid XML using memory streams

我需要將XML流標准化為UTF-16。 我使用以下方法:

傳遞的所有流都是字節流:MemoryStream或FileStream。 我的問題是當我傳入包含以下(正確編碼)XML的文件流作為jobTicket時:

   <?xml version="1.0" encoding="utf-8"?>
   <workflow>
      <file>
        <request name="create-temp-file" tag="очень">
        </request>
        <request name="create-temp-folder" tag="非常に">
        </request>
      </file>
   </workflow>

ticketStreamU16包含一個XML聲明,並帶有以UTF-16表示的UTF-8編碼聲明。 這是格式不正確的XML。

    public void EncodeJobTicket(Stream jobTicket, Stream ticketStreamU16)
    {
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Encoding = Encoding.Unicode;

            if (jobTicket.CanSeek)
            {
                jobTicket.Position = 0;
            }

            using (XmlReader xmlRdr = XmlReader.Create(jobTicket))
            using (XmlWriter xmlWtr = XmlWriter.Create(ticketStreamU16, settings))
            {
                xmlWtr.WriteNode(xmlRdr, false);
            }
    }

我想念什么? xmlWtr是否應該編寫正確的xml聲明? 我是否需要查找聲明並替換它?

您應該從讀取流中刪除xml聲明,因為它無需更改即可復制它。 Xml writer將為您編寫正確的代碼:

using (XmlWriter xmlWtr = XmlWriter.Create(ticketStreamU16, settings))
{
    xmlRdr.MoveToContent();
    xmlWtr.WriteNode(xmlRdr, false);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM