Domanda

Test.xml:

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

Codice 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#">

Il file test.xml file di input è in formato CRLF, codifica UTF-8, 77 byte. Il primo file di output (test1.xml) è in formato CRLF, ANSI codificato, 76 byte. Il secondo file di output (test2.xml) è in formato UNIX, ANSI codificato, 71 byte.

Il contenuto del nodo XML nel file di input è line1 Chr(13)Chr(10) line2 Chr(13)Chr(10) line3 (spazi bianchi per migliorare la leggibilità). I contenuti del nodo XML nel primo file di output è lo stesso come sopra. Il contenuto del nodo XML nel secondo file di output è line1 Chr(10) line2 Chr(10) line3.

Tutte le idee perché il carattere Chr(13) ritorno a capo non è stato conservato dopo la sequenza di XmlParse/ToString?

UPDATE: Il problema è solo con i XMLParse. Non si tratta di ToString o cffile. Ecco un esempio più rilevante - è possibile testare per voi:

<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 --->
È stato utile?

Soluzione

I parser XML normalizzare il CR / LF a LF per il spec . Per mantenere i riferimenti all'uso di entità CR / LF EOL. Vedi sotto:

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

Altri suggerimenti

Hai provato a utilizzare il parametro charset = 'utf-8' nel tag cffile?

I non può riprodurre tutto ciò che si sta parlando con ColdFusion 9.0.1 su Mac OSX. Lo spazio bianco viene conservato proprio come entra. Ho provato entrambe le esempi di cui sopra e hanno lavorato (soprattutto) come previsto. Io in realtà non ho visto alcun CR nella replace () s, ho solo LF sega. Ma tutti loro mantenuta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top