【发布时间】:2013-06-19 12:25:40
【问题描述】:
我尝试加载 XML 文档并保存一份准确的副本。问题是所有换行符号(#10,十六进制 0A)都替换为回车符。 (#13#10, 十六进制 0D0A)
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Information -->
<AddInsList>
<AddInItem ID="name1">
<Title DefaultText="Some text">
<tag1><![CDATA[Some text]]></tag1>
</Title>
<Description DefaultText="some informations">
<tag1><![CDATA[**Some text with line feed symbols 0A**]]></tag1>
</Description>
</AddInItem>
</AddInsList>
我的代码:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, XMLIntf, XMLDoc, ActiveX, xmldom, StdCtrls, ComCtrls;
var
Doc : IXMLDocument;
Begin
Doc:=NewXMLDocument;
//Prevent to change white spaces to tabulators
Doc.ParseOptions := Doc.ParseOptions+[poValidateOnParse]+[poPreserveWhiteSpace];
Doc.LoadFromFile('C:\test.xml');
Doc.SaveToFile('C:\exact.xml');
End;
【问题讨论】:
-
那不是你真正的代码。它不编译。如果您在此处需要帮助,请发布您遇到问题的实际代码;发布虚假代码通常会隐藏实际问题。
-
@user 为什么这是个问题?这不是因为你有一个 CDATA 部分,它的内容没有被解析。在这种情况下,xml 编写器决定使用 windows 样式的换行符来更改 unix 样式的换行符。最后xml还有效吗?
-
我认为 @whosrdaddy #10 符号仅在 CDATA 中,有没有办法将分隔符 #10 和 #13#10 保留在 xml 文档中。
-
@Ken White 我跳过了 Tform 部分,因此您必须将其粘贴到正确的部分使用 var 等。
-
@user2501001:是的,我知道。在
ParseOptions :=之前还缺少Doc,并且您的XML 无效(AddInsList结束标记缺少/)。您在此处发布的代码应该编译并演示您要解决的问题。