【问题标题】:XML line feed symbols are replaced with carriage returnXML 换行符号替换为回车符
【发布时间】: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 结束标记缺少/)。您在此处发布的代码应该编译并演示您要解决的问题。

标签: xml delphi


【解决方案1】:

XML 解析规范换行; XML 序列化负责决定是否将它们转换回 CRLF 形式。见http://www.w3.org/TR/REC-xml/#sec-line-ends

【讨论】:

    猜你喜欢
    • 2017-06-28
    • 1970-01-01
    • 2011-08-21
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2013-02-23
    相关资源
    最近更新 更多