2015-08-27 2 views
1

В нижеприведенном фрагменте файла ant я обрабатываю все файлы conn.xml в каталоге, чтобы узнать, есть ли запись DB, отличная от MyDB. Этот код устанавливает только имя базы данных последнего совпадения, которое все еще в порядке, так как есть только один такой файл. Но я хочу назвать точный файл (из всех включенных файлов), у которого есть эта недопустимая запись.Как распечатать имя файла, которое является процессом через xmltask?

<xmltask> 
    <fileset dir="${srcdir}/../apps" includes="*/conn.xml"/> 
    <copy path="//Reference[@name!='MyDB']/@name" attrvalue="true" property="bad_connection_name"/> 
</xmltask> 

Какой параметр я могу использовать в поле «путь» команды копирования, которое также напечатает текущее имя файла?

ответ

1
<target name="check_connection_violations"> 
    <xmltask source="${file}"> 
     <copy path="//Reference[@className='oracle.jdeveloper.db.adapter.DatabaseProvider' and @name!='MyDB']/@name" attrvalue="true" property="bad_connection_name"/> 
    </xmltask> 
    <if> 
     <isset property="bad_connection_name"/> 
    <then> 
     <echo message="${file} has connection violation due to ${bad_connection_name} entry. ${line.separator}" file="${basedir}/conn_name_violation.txt" append="true"/> 
    </then> 
    </if> 
</target> 

Вышеупомянутая цель - новая цель. Вот оригинальный фрагмент, который вызывает в цикле:

<foreach target="check_connection_violations" param="file"> 
    <fileset dir="${srcdir}/../apps" includes="*/conn.xml"/> 
</foreach> 
+0

Когда я это сделал, я сомневался, что это сработает, потому что свойство bad_connection_name уже установлено и не будет работать в цикле. Но кажется, что xmltask отключает свойство каждый раз, что просто отлично работает для меня. – dganesh2002

2

Атрибут path для копии xmltask содержит только ссылку XPath элемента (ов) для копирования.
Если вы хотите, чтобы поймать все матчи, нужно установить атрибут добавить для xmltask копии,
см xmltask manual:

когда установлено верно, присоединяет к данному буфера или имущества. Вы можете добавлять только при создании нового свойства, поскольку Ant свойства неизменны (т.е. когда XPath решает несколько текстовых узлов)

<copy path="//Reference[@name!='MyDB']/@name" attrvalue="true" property="bad_connection_name" append="true"/> 

Вы также можете установить propertySeparator, по умолчанию = «»

Но гораздо более простой способ, чтобы получить все файлы с плохой строкой подключения использует набор файлов с selector вроде этого:

<fileset dir="${srcdir}/../apps" includes="*/conn.xml" id="foo"> 
<contains text=" your bad Connection string goes here "/> 
</fileset> 

<!-- simple echo --> 
<echo>${toString:foo}</echo> 

<!-- convert to one file one line --> 
<pathconvert refid="foo" pathsep="${line.separator}" property="foobar"/> 
<!-- echo to ant logger/stdout --> 
<echo>${foobar}</echo> 
<!-- write to file --> 
<echo file="path/to/badconnection.txt">${foobar}</echo> 

если плохая строка соединения не статична, используйте containsregexp селектор вместо contains.

+0

Позвольте мне попробовать это .. На самом деле есть два текстовых проверки я совершаю в реальной проблеме, но держать вопрос простой, я добавил только один чек для размещения его Вот. Его похоже -> поэтому не уверен, что он будет работать с файловым набором, а не с параметром. – dganesh2002

+0

В любом случае, мне удалось прибить исправление прошлой ночью, используя foreach .. См. Мой ответ – dganesh2002

+0

@ dganesh2002 с отрицанием - означает использование ... - селектор был не прав, поскольку вы ищете файлы с плохой строкой соединения - имеет был исправлен в моем редактировании. Также вы можете комбинировать несколько селекторов с ... и ... или их комбинации. – Rebse

 Смежные вопросы

  • Нет связанных вопросов^_^