【发布时间】:2010-10-10 00:27:15
【问题描述】:
当我在 C# 中使用 XmlDocument 构建 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,并且具有相同的编码结果?
提示
编辑
我用来通过 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,我该怎么做呢?
【问题讨论】:
-
您说的是
the string is quite different,但据我在您发布的内容中看到的,唯一的区别是缺少encoding=声明。 -
Jim,实际上,字符串的结果编码完全不同,这是我主要关心和问题。
-
我编辑了我的原始帖子,更详细地解释了我的问题。非常感谢您的时间
-
你试过我提出的建议了吗?
标签: xml msxml xmltextwriter ixmldomdocument