Как получить доступ к имени атрибута XML с помощью Freemarker

#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 заключается в удалении отступа.