#xml #attributes #freemarker
#xml #атрибуты #freemarker
Вопрос:
Я новичок в Freemarker и из-за нехватки времени мне нужна немедленная помощь. Мне нужно прочитать имена атрибутов и их значения, структурировать их, и результат должен быть таким, как показано ниже.
Это мой XML «‘
<?xml version="1.0"?>
<root>
<INV store="1" provider="123876" ST702=".00" ST703=".00" ST704=".00" ST705=".00"/>
</root>
»’
Я могу получить доступ к атрибутам внутри элемента, написав это
«‘
${root[«INV /@store»]},${root[«INV /@provider»]}, ${root[«INV /@ST702»]}, ${root[«INV /@ST703″]}……
»’
Это дает следующие результаты
«‘
2,123876,.00,.00,.00
»’
Однако мне нужно, чтобы результат был
2,123876,ST702,.00
2,123876,ST703,.00
2,123876,ST704,.00
2,123876,ST705,.00
Буду с нетерпением ждать помощи.
Ответ №1:
Не уверен, какое правило извлечения указано выше, но что-то вроде этого:
<#assign inv=root.INV>
<#list inv.@@ as attr>
<#if attr?node_name?starts_with('ST7')>
${inv.@store},${inv.@provider},${attr?node_name},${attr}<#lt>
</#if>
</#list>
Также обратите внимание, что такие вещи, как ${root["INV/@store"]}
могут быть записаны как ${root.INV.@store}
.
Комментарии:
1. ST702 и ST703 и т.д. — Это все названия магазинов, а их соответствующие значения — количество. , то есть, почему мне нужно, чтобы имя отображалось в моем текстовом формате. В любом случае, ваш ответ дал мне именно то, что мне было нужно. Большое спасибо :). Однако у меня есть вопрос, почему <#lt>? это связано с пробелом или чем-то еще?
2.
#lt
заключается в удалении отступа.