В скрипте Ant мне нужно заменить значение javax.persistence.jdbc.url
в следующем файле persistence.xml.Как заменить значение поля XML с помощью Ant?
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="testPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>org.somecompany.domain.SomeEntity</class>
<validation-mode>NONE</validation-mode>
<properties>
<property name="testprop" value="testval" />
</properties>
</persistence-unit>
</persistence>
Я скачал XMLTask и попробовал следующее:
<xmltask source="${persistence-xml-file-path}" dest="${persistence-xml-file-path}_replaced" report="true">
<replace path="/:persistence/:persistence-unit/:properties/:property[:name/text()='testprop']/:value/text()" withText="replaced" />
</xmltask>
К сожалению, это не работает. У меня нет ошибок. Содержимое как исходных, так и целевых xml-файлов отображается в консоли, и они одинаковы. Это как если бы приведенная выше инструкция замены никогда не запускалась (или никогда не идентифицирует свойство для обновления).
=== Последующий ответ от Патриса ===================================== =====
Это похоже на работу без определения схемы для сохранения состояния тега:
<xmltask source="${persistence-xml-file-path}" dest="${persistence-xml-file-path}_replaced" report="true" failWithoutMatch="true">
<attr path="persistence/persistence-unit/properties/property[@name='testprop']" attr="value" value="replaced"/>
</xmltask>
Это похоже на работу с определением схемы для сохранения состояния тега:
<xmltask source="${persistence-xml-file-path}" dest="${persistence-xml-file-path}_replaced" report="true" failWithoutMatch="true">
<attr path="//*[@name='testprop']" attr="value" value="replaced"/>
</xmltask>
Атрибуты мне нужно процесс очень уникален, поэтому t он будет работать отлично для меня, без необходимости исследовать весь путь атрибутов.
Показать образец XML, что вы работаете, чтобы увидеть, если это происходит потому, что любых пространств имен. – Rao
Ваш путь замещения, похоже, не является допустимым XPath, должен быть более чем похожим: '/persistence/persistence-unit/properties/property[[name='javax.persistence.jdbc.url ']/@ value' –
@Rao Я перешел на простой xml, который теперь включен в мой вопрос. Я также изменил свойство и значение на простые строки, чтобы избежать возможных конфликтов со специальными символами (периоды, двоеточия). Я все еще не могу заменить значение. – user2984213