如何打印 xmltask 正在处理的文件名?
How can I print the filename which is being processes by xmltask?
在下面的 ant 脚本片段中,我正在处理目录中的所有 conn.xml 文件,以查明是否存在 MyDB 以外的数据库条目。此代码仅设置最后一场比赛的数据库名称,这仍然可以,因为通常只有一个这样的文件。但我想命名具有此无效条目的确切文件(在所有包含的文件中)。
<xmltask>
<fileset dir="${srcdir}/../apps" includes="*/conn.xml"/>
<copy path="//Reference[@name!='MyDB']/@name" attrvalue="true" property="bad_connection_name"/>
</xmltask>
我可以在复制命令的 "path" 字段中使用什么参数来打印当前文件名?
xmltask 复制的路径属性仅包含要复制的元素的 XPath 引用。
如果要捕获所有匹配项,则需要为 xmltask 副本设置附加属性,
请参阅 xmltask manual :
when set to true, appends to the given buffer or property. You can
only append when creating a new property since Ant properties are
immutable (i.e. when an XPath resolves to multiple text nodes)
<copy path="//Reference[@name!='MyDB']/@name" attrvalue="true" property="bad_connection_name" append="true"/>
你也可以设置一个propertySeparator, default=','
但是获取所有连接字符串错误的文件的更简单方法是使用带有 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 selector instead of contains。
<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>
在下面的 ant 脚本片段中,我正在处理目录中的所有 conn.xml 文件,以查明是否存在 MyDB 以外的数据库条目。此代码仅设置最后一场比赛的数据库名称,这仍然可以,因为通常只有一个这样的文件。但我想命名具有此无效条目的确切文件(在所有包含的文件中)。
<xmltask>
<fileset dir="${srcdir}/../apps" includes="*/conn.xml"/>
<copy path="//Reference[@name!='MyDB']/@name" attrvalue="true" property="bad_connection_name"/>
</xmltask>
我可以在复制命令的 "path" 字段中使用什么参数来打印当前文件名?
xmltask 复制的路径属性仅包含要复制的元素的 XPath 引用。
如果要捕获所有匹配项,则需要为 xmltask 副本设置附加属性,
请参阅 xmltask manual :
when set to true, appends to the given buffer or property. You can only append when creating a new property since Ant properties are immutable (i.e. when an XPath resolves to multiple text nodes)
<copy path="//Reference[@name!='MyDB']/@name" attrvalue="true" property="bad_connection_name" append="true"/>
你也可以设置一个propertySeparator, default=','
但是获取所有连接字符串错误的文件的更简单方法是使用带有 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 selector instead of contains。
<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>