首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使TXMLDocument (使用MSXML实现)始终包含编码属性?

如何使TXMLDocument (使用MSXML实现)始终包含编码属性?
EN

Stack Overflow用户
提问于 2010-05-04 01:32:50
回答 2查看 4.9K关注 0票数 9

我有一些遗留代码(不是我写的),它们总是包含编码属性,但是将它重新编译为D2010,TXMLDocument不再包含编码。因为XML数据在标记和数据上都有重音字符,所以TXMLDocument.LoadFromFile只抛出EDOMParseErros,说明在文件上发现了无效字符。相关代码:

代码语言:javascript
复制
   Doc := TXMLDocument.Create(nil);  
   try
     Doc.Active := True;
     Doc.Encoding := XMLEncoding;
     RootNode := Doc.CreateElement('Test', '');
     Doc.DocumentElement := RootNode;
     <snip>
     //Result := Doc.XMl.Text;
     Doc.SaveToXML(Result);    // Both lines gives the same result

在较早版本的Delphi上,将生成以下行:

代码语言:javascript
复制
<?xml version="1.0" encoding="ISO-8859-1"?>

在D2010上,将生成以下内容:

代码语言:javascript
复制
<?xml version="1.0"?>

如果我手动更改线路,所有的工作都像过去几年一样工作。

更新: XMLEncoding是一个常量,定义如下

代码语言:javascript
复制
  XMLEncoding = 'ISO-8859-1';
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-05 02:37:41

代码语言:javascript
复制
var 
  XMLStream: TStringStream;
begin  
   Doc := TXMLDocument.Create(nil);  
   try
     Doc.Active := True;
     Doc.Encoding := XMLEncoding;
     RootNode := Doc.CreateElement('Test', '');
     Doc.DocumentElement := RootNode;
     <snip>
     XMLStream := TStringStream.Create;
     Doc.SaveToStream(XMLStream);
     Result := XmlStream.DataString;
     XMLStream.Free;

由于Ken的回答和指向MSXML文章的链接,我决定研究XML属性和SaveToXML方法。两者都使用MSXMLDOM实现的XML属性-在本文中说,直接读取时不会引入编码(在使用CreateProcessInstruction方法之后的“使用MSXML创建新的XML文档”部分)。

更新:

我发现重音字符在生成的XML中被截断了。当该XML的处理程序开始抛出奇怪的错误时,我们看到字符正在被转换为数字字符常量( #13是用于回车的数字字符常量)。所以,我使用了一个TStringStream来让它 right。

票数 4
EN

Stack Overflow用户

发布于 2010-05-04 04:08:54

你会想见见IXMLDocument.CreateProcessingStruction的。我使用的是OmniXML,但它的语法很相似,应该可以让您入门:

代码语言:javascript
复制
var
  FDoc: IXMLDocument;
  PI:  IXMLProcessingInstruction;
begin
  FDoc := OmniXML.CreateXMLDoc();
  PI := FDoc.CreateProcessingInstruction('xml', 'version="1.0" encoding="UTF-8"');
  FDoc.AppendChild(PI);
end;
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2759940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档