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
?
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 --->