ColdFusion:XmlParse不保留回车

时间:2010-11-23 16:33:34

标签: coldfusion newline tostring carriage-return

的test.xml:

<?xml version="1.0" encoding="UTF-8"?>
<node>line1
line2
line3</node>

CF代码:

<cfset xmlfile = ExpandPath("test.xml")>
<cffile action="read" file="#xmlfile#" variable="xmlstring">
<cffile action="write" file="test1.xml" output="#xmlstring#">

<cfset xmldoc = XmlParse(xmlstring)> 
<cfset xmltext = ToString(xmldoc)>
<cffile action="write" file="test2.xml" output="#xmltext#">

输入文件test.xml文件采用CRLF格式,UTF-8编码,77字节。 第一个输出文件(test1.xml)采用CRLF格式,ANSI编码,76字节。 第二个输出文件(test2.xml)是UNIX格式,ANSI编码,71个字节。

输入文件中XML节点的内容为line1 Chr(13)Chr(10) line2 Chr(13)Chr(10) line3(可读性为空白)。 第一个输出文件中XML节点的内容与上面相同。 第二个输出文件中XML节点的内容为line1 Chr(10) line2 Chr(10) line3

Chr(13)序列之后没有保留回车字符XmlParse/ToString的任何想法?

更新 问题出在XmlParse上。它不是关于ToString或cffile。 这是一个更相关的例子 - 你可以自己测试一下:

<cfsavecontent variable="xmlvar">
<nodes>
    <node>
line1
line2
line3
    </node>
</nodes>
</cfsavecontent>

<cfset vtext = "#xmlvar#">
<cfset vtext = Replace(vtext,Chr(10),'LF','All')>
<cfset vtext = Replace(vtext,Chr(13),'CR','All')>
<cfdump var = "#vtext#">
<!--- outputs CRLF<nodes>CRLF <node>CRLFline1CRLFline2CRLFline3CRLF </node>CRLF</nodes>CRLF --->
<cfset xmldoc = XmlParse(xmlvar)>
<cfset vtext = "#xmldoc.nodes.node.XmlText#">
<cfset vtext = Replace(vtext,Chr(10),'LF','All')>
<cfset vtext = Replace(vtext,Chr(13),'CR','All')>
<cfdump var = "#vtext#">
<!--- outputs LFline1LFline2LFline3LF --->

3 个答案:

答案 0 :(得分:0)

您是否尝试在cffile标记中使用参数charset ='utf-8'?

答案 1 :(得分:0)

我无法在Mac OSX上重现您与ColdFusion 9.0.1讨论的任何内容。白色空间正在被保留。我尝试了上面的两个例子,它们(大多数)按预期工作。我实际上没有在replace()中看到任何CR,我只看到了LF。但它保留了所有这些。

答案 2 :(得分:0)

XML Parsers根据spec将CR / LF规范化为LF。保持CR / LF EOL使用实体引用。见下文:

<cfsavecontent variable="xmlvar">
<nodes>
    <node>
      line1&#x000D;&#x000A;
      line2&#x000D;&#x000A;
      line3&#x000D;&#x000A;
    </node>
</nodes>
</cfsavecontent>