当我使用 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,我该怎么做呢?