У меня есть таблица без иерархии любого типа, которая должна выводиться в XML, затем отформатирована и упорядочена на основе чисел в столбце SEQ
. Я использую ColdFusion для генерации XML, так как вывод форматирования является немного сложным для обработки TSQL. Моя проблема в том, что я немного потерял, как правильно иметь идентификаторы дескрипторов ColdFusion, где может быть больше, чем количество строк, которые у меня есть в файле шаблона.Генерировать XML из таблицы базы данных
Вот общее представление о том, что я работаю с:
Мой стол только 1 ID (я хочу это для тысяч идентификаторов):
MODNM | CARNM | PARTID | PARNAME | SEQ | TYPE | VALUE | FLAG
-----------------------------------------------------------------------------------
M-880 | HONA | 29000153 | SETGROUP | 1 | A | 3 | P
M-880 | HONA | 29000153 | *CDMZI | 2 | A | F%+A8E=,,,0;+MS=V123,456; | P
M-880 | HONA | 29000153 | DMTZ | 3 | A | | P
M-880 | HONA | 29000153 | CDRFCP | 4 | A | 0 | P
M-880 | HONA | 29000153 | SETGROUP | 5 | A | 15 | P
M-880 | HONA | 29000153 | #PT | 5 | 6 | NONE | P
M-880 | HONA | 29000153 | CDH6 | 7 | A | 100.111.100.44 | P
M-880 | HONA | 29000153 | CDEPORT | 8 | A | 9003 | P
формат XML должен быть :
<Device PartID="29000153" MODNM="M-880">
<Car Name="HONA">
<Group GID="3">
<Pmeter ParName="*CDMZI" Value="F%+A8E=,,,0;+MS=V123,456;" Type="A" Flag="P" />
<Pmeter ParName="DMTZ" Value="" Type="A" Flag="P" />
<Pmeter ParName="CDRFCP" Value="0" Type="A" Flag="P" />
</Group>
<Group GID="15">
<Pmeter ParName="#PT" Value="NONE" Type="A" Flag="P" />
<Pmeter ParName="CDH6" Value="100.111.100.44" Type="A" Flag="P" />
<Pmeter ParName="CDEPORT" Value="9003" Type="A" Flag="P" />
</Group>
</Car>
<DevFiles />
</Device>
У меня ColdFusion устанавливается следующим образом, чтобы сгенерировать XML-файл. Проблема в том, что я не знаю точно, как ColdFusion динамически обрабатывает идентификаторы, когда есть больше PARNAMES
, чем то, что отложено в файле шаблона.
runXMLgen.cfm - генерирует XML-файл
CFQUERY
вытащить все идентификаторы из таблицы- использования
<cfinclude template>
для xmltmplt.cfm использования
CFFILE
для хранения XML-файл в локальный каталогВЫБЕРИТЕ PARTID, PARNAME, VALUE, SEQ, FLAG, TYPE ОТ PMETER WHE RE PartID в ('290000153') И MODNM = 'М-880' И CARNM = 'Hona' ORDER BY SEQ ASC
<cfset xmlStartData = "<SData>#chr(13)##chr(10)##chr(32)##chr(32)#<Devices SpecVersion=""1.0"">#chr(13)##chr(10)#" /> <cffile action="append" addnewline="no" file="C:\extract.xml" output="#xmlStartData#" /> <Devices SpecVersion="1.0"> <cfoutput> <cfloop query="bextract"> <cfinclude template="xmltmplt.cfm" /> <cffile action="append" addnewline="no" file="C:\extract.xml" output="#bParams#" /> </cfloop> </cfoutput> </Devices> <cfset xmlEndData = "#chr(32)##chr(32)#</Devices>#chr(13)##chr(10)#</SData>" /> <cffile action="append" addnewline="no" file="C:\extract.xml" output="#xmlEndData#" />
xmltmplt. cfm - жестко закодированный шаблон, который должен автоматически генерировать значения на основе порядка seq и начинать новый, когда видит setgroup в качестве имени parname. Ниже несколько неполно, поскольку я не избегаю ценностей, но это в основном, где я застрял. Выяснение того, как динамически заполнять XML-файл на основе seqorder и определенных парней, не зная, сколько парнейдов может иметь идентификатор.
<cfset bParams = " <Device PartID="#partID#" MODNM="#modnm">#chr13#
<Car Name="#carnm#">#chr13#
<Group GID="#parname#">#chr13#
<Pmeter ParName="#parname#" Value="#value#" Type="#type#" Flag="#flag#" />#chr13#
<Pmeter ParName="#parname#" Value="#value#" Type="#type#" Flag="#flag#" />#chr13#
</Group>#chr13#
<Group GID="#parname#">#chr13#
<Pmeter ParName="#parname#" Value="#value#" Type="#type#" Flag="#flag#" />#chr13#
<Pmeter ParName="#parname#" Value="#value#" Type="#type#" Flag="#flag#" />#chr13#
</Group>#chr13#
</Car>#chr13#
<DevFiles />#chr13#
</Device> " />
Вам нужно разместить код, показывающий, как вы создаете текущий xml. Похоже, что он каким-то образом закодирован.Вы пытались использовать cfoutput group = ".."? Для этого потребуется несколько «групп», но если они структурированы правильно, вы можете использовать его для генерации неизвестного количества элементов PARNAMES. – Leigh
Имея серьезные проблемы с nubtacular, отправляя код с форматированием stackoverflow. Даже с четырьмя пробелами с отступом, мой код отключается, когда я отправляюсь на почту. Есть идеи? – bman2013
Глупый вопрос. Вы уверены, что это не просто обращение как текст? Это может привести к тому, что cfml исчезнет, потому что браузер видит его как html-теги, поэтому он не отображается. Кроме того, вы попробовали кнопку кода, т.е. '{}'. – Leigh