的test.xml:的ColdFusion:XMLPARSE不保留回車
<?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)採用ANSI編碼的CRLF格式,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
。
任何想法,爲什麼在XmlParse/ToString
序列後沒有保留回車符Chr(13)
?
UPDATE: 問題只在於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 --->
什麼CF版本和操作系統? – 2010-11-23 16:50:39
CF 8,Windows XP Professional SP3 也在CF 9上覆制。 – dmr 2010-11-24 07:51:57
在我看來,根據一點搜索,默認情況下,XML Parsers無法保留空白,因爲大部分時間空白在數據上沒有意義以及它在哪裏很重要(佈局中)很少見。但它看起來有一個屬性,您可以設置它來告訴解析器保留空白。我不知道它是否適用於這種情況,因爲我沒有遇到您在我的系統上描述的任何問題。 ref:http://www.w3.org/TR/REC-xml/#sec-white-space – 2011-01-28 11:08:31