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) находится в формате 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 --->
Какая версия 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