Замена нескольких строк текста с помощью Ant

У меня есть файл xml, в котором мне нужно закомментировать целый фрагмент текста с помощью Ant.

Вот эта задача Ant

<replace file="${src.dir}/Version.as" 
         token="@revisionPrana" value="${revision}"/>

который я использую для замены слов, но в моем случае мне нужно заменить целый блок следующим образом:

<value>
  <object class="edumatic.backoffice.view.modules.NavigationModuleInfo">
    <property name="url"
     value="edumatic/backoffice/view/modules/support/ExamsNavigationModule.swf"/>
    <property name="icon"
     value="edumatic/backoffice/view/modules/support/assets/book.png" />
    <property name="title" value="Assessments" />
    <property name="pluginID" value="EXAM" />
  </object>
</value>
<value>
  <object class="edumatic.backoffice.view.modules.ContentModuleInfo">
    <property name="url"
     value="edumatic/backoffice/view/modules/support/ExamsContentModule.swf" />
    <property name="pluginID" value="EXAM" />
  </object>
</value>

В

<!--value>
  <object class="edumatic.backoffice.view.modules.NavigationModuleInfo">
    <property name="url"
     value="edumatic/backoffice/view/modules/support/ExamsNavigationModule.swf"/>
    <property name="icon"
     value="edumatic/backoffice/view/modules/support/assets/book.png" />
    <property name="title" value="Assessments" />
    <property name="pluginID" value="EXAM" />
  </object>
</value>
<value>
  <object class="edumatic.backoffice.view.modules.ContentModuleInfo">
    <property name="url"
     value="edumatic/backoffice/view/modules/support/ExamsContentModule.swf" />
    <property name="pluginID" value="EXAM" />
  </object>
</value-->

Итак, в основном мне нужно закомментировать целый блок XML. Могу ли я сделать это с помощью задачи замены (помещение всего блока в токен атрибута и значение на самом деле не работает)? Или есть быстрый способ прочитать xml с помощью ant и удалить некоторые узлы и снова сохранить xml?

Поиск и замена на невозможна, потому что есть несколько дочерних элементов значения, и не все из них нужно комментировать.

Добавление атрибута like также невозможно, поскольку xml анализируется контейнером IOC (Prana). Возможно, прана проигнорирует id="1", но это все равно непорядок, а я не люблю беспорядок в долгосрочной перспективе.


person Lieven Cardoen    schedule 23.10.2008    source источник


Ответы (2)


Если вы можете определить, что нужно заменить, с помощью регулярного выражения, я рекомендую использовать дополнительную задачу replaceregexp. Вот документ: http://ant.apache.org/manual/Tasks/replaceregexp.html Вы можете вызвать его дважды, один раз для начального тега, а другой для конечного.

Регулярное выражение для замены вашего может быть немного громоздким, так как вы говорите, что не хотите заменять все теги , но я думаю, что это самый простой способ.

Другой вариант — создать пользовательскую задачу ant, чтобы делать то, что вы хотите.

person Miguel Ping    schedule 23.10.2008
comment
Что ж, действительно, я искал руководство по задачам ant и нашел это replaceregexp, но задавался вопросом, как справиться с возвратом каретки или переводом строки. Попробую это. Заказная задача муравья была бы отличной, но время в компании — деньги :-). В свободное время займусь исследованиями и разработками. Спасибо. - person Lieven Cardoen; 23.10.2008
comment
Удалось заставить его работать с replaceregexp. Пришлось поискать некоторое время, прежде чем понять, что нужен флаг s! Спасибо! - person Lieven Cardoen; 23.10.2008

Если это файл XML, вы также можете вызвать преобразование XSLT.

person Mads Hansen    schedule 24.10.2008
comment
Действительно, не думал об этом (+ то, что я ничего не знаю о XSLT...). - person Lieven Cardoen; 25.10.2008