2013-06-25 79 views
2

我試圖向簡單的XML文檔輸出查詢。我已經多次使用這個相同的代碼進行其他查詢,並且它工作正常。似乎在某個地方的描述字段中存在一個錯誤的字符,XMLformat()不會將其過濾出來。我嘗試過無數REReplace()過濾器無濟於事。也嘗試了Ben Nadel的技術。 http://www.bennadel.com/blog/1155-Cleaning-High-Ascii-Values-For-Web-Safeness-In-ColdFusion.htm和一切都導致了相同的錯誤。我沒有轉儲輸出並搜索不好的字符,我什麼也沒找到。這件簡單的事變成了很神祕的事。我正在使用下面的代碼。Coldfusion XML輸出中的無效XML字符(Unicode:0x1e)

<cfquery name="list" datasource="theDatasource"> 
SELECT ItemID, ItemCode, BrandName, description 
FROM theTable 
</cfquery> 

<cfxml variable="outputXML"> 
<itemsBrand> 
    <cfoutput query="list"> 
    <itemBrand> 
     <ItemID>#XmlFormat(ItemID)#</ItemID> 
     <ItemCode>#XmlFormat(ItemCode)#</ItemCode> 
     <BrandName>#XmlFormat(BrandName)#</BrandName> 
     <description>#XmlFormat(description)#</description> 
    </itemBrand> 
    </cfoutput> 
</itemsBrand> 
</cfxml> 

<cffile action="write" file="#GetDirectoryFromPath(GetCurrentTemplatePath())#itemBrand.xml" output="#toString(outputXML)#"/> 

是導致錯誤「無效的XML字符(Unicode:0X1E)在文檔的元素含量被發現。」任何幫助,將不勝感激。

回答

2

它似乎有點奇怪,它是在一個 0x1E,這只是一個大於符號barfing。 (編輯:不,不知道爲什麼我得出這個結論。

這可能是一個想法,暫時將<cfxml>換成<cfsavecontent>,以便您可以構建字符串,然後解析它以找出不正確的字符串。這應該給你更多的線索如何整理出來。但xmlFormat()應該處理任性的尖括號。

另一件事:如果你用這個XML所做的全部工作就是將它串行化並將其寫入文件,那麼實際上並不需要使用<cfxml>。無論如何,請繼續使用<cfsavecontent>。如果你想要一個字符串:只需要一個字符串。

+0

我最終按照Adam的建議轉儲了內容,並通過XML驗證程序運行它。問題是由於Unicode:0x1e字符被隱藏導致的。我不得不在我的文本編輯器中打開查看隱藏字符,刪除有問題的字符,然後將所有代碼複製並粘貼到新文件中。感謝Adam的幫助。 –

+0

NP [等...所以我的回覆足夠長] –

+0

據我可以告訴0x1e不是一個大於符號,但一個不可打印的控制字符? –