2013-06-25 3 views
2

Я пытаюсь вывести запрос в простой XML-документ. Я использовал этот же код несколько раз для других запросов, и он работал нормально. Кажется, что в поле описания есть плохой символ, а XMLformat() не фильтрует его. Я пробовал многочисленные фильтры REReplace(), но безрезультатно. Также была найдена техника Бен Наделя. http://www.bennadel.com/blog/1155-Cleaning-High-Ascii-Values-For-Web-Safeness-In-ColdFusion.htm и все привело к той же ошибке. Я сбросил выходные данные и искал плохих персонажей, и ничего не нашел. Эта простая вещь превратилась в довольно загадочную. Я использую код ниже.Недопустимый символ XML (Unicode: 0x1e) в XML-выход Coldfusion

<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

Кажется немного странным, что это barfing на 0x1E, который является просто символом большего, чем символ. (изменить: нет, это не так, не знаю, почему я пришел к такому выводу. AC).

Возможно, было бы неплохо поменять код <cfxml> на <cfsavecontent>, чтобы вы могли построить строку, а затем проанализировать ее, чтобы узнать, что не так. Это должно дать вам больше информации о том, как разобраться. Но xmlFormat() должен иметь дело с скользящими скобами.

Другое дело: если все, что вы делаете с этим XML, должно затем сериализовать его и записать в файл, вам фактически не нужно использовать <cfxml>. Просто продолжайте использовать <cfsavecontent> в любом случае. Если вы хотите строку: просто введите строку.

+0

Я закончил тем, что сбрасывал содержимое, как рекомендовал Адам, и проверил его и проверил XML. Проблема вызвана символом Unicode: 0x1e, который был скрыт. Мне пришлось включить скрытые символы в текстовом редакторе, удалив проблемный символ, затем скопируйте и вставьте весь код в новый файл. Спасибо за помощь Адаму. –

+0

NP [и т.д ... так что мой ответ достаточно длинный, чтобы опубликовать] –

+0

Насколько я могу сказать, 0x1e не больше символа, а непечатаемого символа управления? –