2014-10-23 3 views
2

У меня есть разные биты создания XML. Один из таких примеров приведен ниже:ColdFusion: Minify XML

<cfxml variable="xmlDoc"> 
    <cfoutput> 
     <?xml version='1.0' encoding='utf-8' ?> 
     <event id="#iEventId#"> 
      <relatedevents> 
       <cfloop query="qPreviousEvents"> 
        <cfif eventid IS NOT iEventId> 
         <event id="#eventid#" sameyear="<cfif DateFormat(startdate, " yyyy ") EQ DateFormat(cfcObject.GetStartDate(), "yyyy ")>1<cfelse>0</cfif>"> 
          <title>#XmlFormat(Title)#</title> 
          <tag>#LCase(ReReplaceNoCase(ReReplaceNoCase(tagname, " ", "-", "all"), "[^a-z0-9_-]", "", "all"))#</tag> 
         </event> 
        </cfif> 
       </cfloop> 
      </relatedevents> 
     </event> 
    </cfoutput> 
</cfxml> 
<cfreturn xmlDoc> 

Мой вопрос в том, как результирующий XML можно минимизировать? В настоящий момент есть пустые строки, где CF и строка для каждого узла. В идеале я бы хотел, чтобы это было уменьшено, так что это только на одной строке, без пробелов между тегами.

Мог ли я где-нибудь заменить или есть функция, которую я мог бы использовать?

Благодаря

ответ

4

Вместо поставить отступы в то взять его обратно снова, возможно, лучше не ставить его в в первую очередь.

Разумно целесообразно (если немного безвкусный) способ сделать это может быть, чтобы подавить вывод, когда вы оговорить его, например, за исключением:

<cfsetting enablecfoutputonly="true"> 
<cfxml variable="x"> 
    <cfoutput><aaa></cfoutput> 
     <cfoutput><bbb/></cfoutput> 
     <cfoutput><ccc ddd="eee">fff<ggg /></ccc></cfoutput> 
    <cfoutput></aaa></cfoutput> 
</cfxml> 

<pre> 
<cfoutput>#encodeForHtml(toString(x))#</cfoutput> <!--- <?xml version="1.0" encoding="UTF-8"?> <aaa><bbb/><ccc ddd="eee">fff<ggg/></ccc></aaa> ----> 
</pre> 
+1

'encodeForHTML' получил с добавлением CF10() - вопрос с тегами CF8. Просто для информации, если op задается вопросом, почему ваш пример вызывает ошибку. – Seybsen

+0

Хороший звонок. Очевидно (?) Мой код - и особенно его часть - предназначен только для демонстрационных целей. Но это никоим образом не отменяет то, что вы говорите. –