0

XDocumentをまとめて、次のコードでUTF8文字列にシリアル化します。

string xmlString = "";
using (MemoryStream ms = new MemoryStream())
{
  using (XmlWriter xw = new XmlTextWriter(ms, Encoding.UTF8))
  {
    doc.Save(xw);
    xw.Flush();
    StreamReader sr = new StreamReader(ms);
    ms.Seek(0, SeekOrigin.Begin);
    xmlString = sr.ReadToEnd();
  }
}

これはうまくいきました。

次に、宣言子が文字列にシリアル化されているかどうかを切り替える必要がありました。コードを次のように変更しました。

string xmlString = "";
using (MemoryStream ms = new MemoryStream())
{
  XmlWriterSettings settings = new XmlWriterSettings()
  {
    OmitXmlDeclaration = !root.IncludeDeclarator,
    Encoding = Encoding.UTF8
  };
  using (XmlWriter xw = XmlTextWriter.Create(ms, settings))
  {
    doc.Save(xw);
    xw.Flush();
    StreamReader sr = new StreamReader(ms);
    ms.Seek(0, SeekOrigin.Begin);
    xmlString = sr.ReadToEnd();
  }
}

これにより、doc.Save(xw)で次の例外がスローされます。

プレフィックス''は、同じ開始要素タグ内で''から'my_schema_here'に再定義することはできません。

ライターが「新規」である場合にXDocを保存できるのに、「。Create」である場合は保存できない理由を理解しようとしています。何か案は?

ジョーダン

4

1 に答える 1

0

XDocumentのルート要素の名前に名前空間を追加することでこれを修正しました。それでも、「XmlTextWriter.Create()」または「XmlWriter.Create()」の代わりに「newXmlTextWriter()」が使用されている場合、これが必要ないのは不思議です。

ジョーダン

于 2011-02-23T19:31:32.780 に答える