Муравей macrodef: существует ли способ получить содержание параметра элемента?

Я пытаюсь отладить macrodef у Муравья. Я, может казаться, не нахожу способ отобразить содержание параметра, отправленного как элемент.

<project name='debug.macrodef'>
  <macrodef name='def.to.debug'>
    <attribute name='attr' />
    <element name='elem' />
    <sequential>
      <echo>Sure, the attribute is easy to debug: @{attr}</echo>
      <echo>The element works only in restricted cases: <elem /> </echo>
      <!-- This works only if <elem /> doesn't contain anything but a
           textnode, if there were any elements in there echo would
           complain it doesn't understand them. -->
    </sequential>
  </macrodef>

  <target name='works'>
    <def.to.debug attr='contents of attribute'>
      <elem>contents of elem</elem>
    </def.to.debug>
  </target>

  <target name='does.not.work'>
    <def.to.debug attr='contents of attribute'>
      <elem><sub.elem>contents of sub.elem</sub.elem></elem>
    </def.to.debug>
  </target>
</project>

Пример выполняется:

$ ant works
...
works:
 [echo] Sure, the attribute is easy to debug: contents of attribute
 [echo] The element works only in restricted cases:  contents of elem
...

$ ant does.not.work
...
does.not.work:
 [echo] Sure, the attribute is easy to debug: contents of attribute

BUILD FAILED
.../build.xml:21: The following error occurred while executing this line:
.../build.xml:7: echo doesn't support the nested "sub.elem" element.
...

Таким образом, я предполагаю, что мне нужен любой способ получить содержание <elem /> в свойство так или иначе (некоторые расширили macrodef реализацию, мог бы иметь это), или мне нужен своего рода <element-echo><elem /></element-echo> это могло распечатать любое дерево XML, которое Вы вставляете. Кто-либо знает о реализации любого из них? Любой третий, непредвиденный способ вывести данные, конечно, также приветствуется.

8
задан clacke 23 July 2010 в 12:59
поделиться

1 ответ

Как насчет задачи echoxml ?

В вашем примере файла сборки замена строки

<echo>The element works only in restricted cases: <elem /> </echo>

на

<echoxml><elem /></echoxml>

приводит к

$ ant does.not.work
...
does.not.work:
     [echo] Sure, the attribute is easy to debug: contents of attribute
<?xml version="1.0" encoding="UTF-8"?>
<sub.elem>contents of sub.elem</sub.elem>

Возможно, объявление XML не требуется. Вы можете использовать атрибут echoxml file , чтобы поместить вывод во временный файл, затем прочитать этот файл и удалить объявление или переформатировать информацию по своему усмотрению.

edit

Поразмыслив, вы, вероятно, сможете приблизиться к тому, что вы описываете, например, это последовательное тело вашего macrodef

<sequential>
  <echo>Sure, the attribute is easy to debug: @{attr}</echo>
  <echoxml file="macro_elem.xml"><elem /></echoxml>
  <loadfile property="elem" srcFile="macro_elem.xml">
    <filterchain>
      <LineContainsRegexp negate="yes">
      <regexp pattern=".xml version=.1.0. encoding=.UTF-8..." />
      </LineContainsRegexp>
    </filterchain>
  </loadfile>
  <echo message="${elem}" />
</sequential>

дает

$ ant does.not.work
...
does.not.work:
     [echo] Sure, the attribute is easy to debug: contents of attribute
     [echo] <sub.elem>contents of sub.elem</sub.elem>
9
ответ дан 5 December 2019 в 18:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: