XmlDocument を使用して C# で XML を構築し、エンコーディング情報を含めて XML をファイルに保存する場合は、次のように XmlTextWriter を使用します。
using (StringWriter swr = new StringWriter())
{
using (XmlTextWriter xtw = new XmlTextWriter(swr))
{
xmlDoc.WriteTo(xtw);
return swr.ToString();
}
}
上記のコードでは、返される文字列の構文は次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<regs>
<reg1>
....
</reg1>
</regs>
IXMLDOMDocument メソッドを使用して同じ動作をしたいと考えています。このシナリオでは、XML 文字列を抽出する唯一の方法は、xmlDoc.xml
メソッドを使用することです。ただし、この方法を使用すると、エンコーディングと同様に、文字列はまったく異なります。
<?xml version="1.0"?>
<regs>
<reg1>
....
</reg1>
</regs>
XmlTextWriter で取得したのと同じ方法で、同じエンコーディング結果で IXMLDOMDocument を出力する方法はありますか?
Tks
編集
DOM を介して XML を生成するために使用するコードは、Delphi にあります。
function TXMLClass.GenerateXML: Variant;
var
iCont: Integer;
sName, sValor: String;
vXML: Variant;
oNodeDados, oNodeCliente, oNodeTransacao: Variant;
oHeader: Variant;
begin
vXML := CreateOLEObject('Msxml2.DOMDocument.6.0');
try
oHeader := vXML.createProcessingInstruction('xml', 'version=''1.0'' encoding=''utf-8''');
vXML.AppendChild(oHeader);
oNodeDados := vXML.CreateElement('regs');
vXML.AppendChild(oNodeDados);
oNodeCliente := vXML.CreateElement('reg1');
oNodeDados.AppendChild(oNodeCliente);
Result := vXML;
except
on e: Exception do
begin
vXML := Unassigned;
Result := vXML;
raise;
end;
end;
end;
私の主な問題は、結果の文字列のエンコーディングです。結果の WideString を C# WebService に送信し、XmlDocument で読み取ると、アクセント付きの文字がすべて間違っているためです。C# で XML を生成し、XmlTextWriter を介してエクスポートし、それを Delphi に送り返し、DOM を介してロードすると、文字は正しくなります。
編集
を使用するvXML.Save(file_name.xml)
と、保存されたファイルは正しくコーディングされ、WideString (Delphi では Unicode 文字列) にロードして Web サービスに送信すると、うまくいきます。しかし、それをディスクに保存せずに、DOM を介して行うにはどうすればよいでしょうか?