Когда я создаю XML в C # с использованием XmlDocument и хочу сохранить в 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>
Есть ли способ вывести IXMLDOMDocument так же, как я получаю с XmlTextWriter, и с теми же результатами кодирования?
Tks
Редактировать
Код, который я использую для генерации XML через DOM, находится в 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, все символы с любым акцентом ошибочны.Когда я генерирую XML в C #, экспортирую его через XmlTextWriter и отправляю обратно в Delphi, и я загружаю его через DOM, символы правильные.
Редактировать
Когда я использую vXML.Save(file_name.xml)
, сохраненный файл кодируется правильно, и если я загружаю его в WideString (строку Unicode в Delphi) и передаю его в веб-службу, он работает хорошо.Но как я могу это сделать, не сохраняя его на диск и через DOM?