首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何打印由xmltask处理的文件名?

如何打印由xmltask处理的文件名?
EN

Stack Overflow用户
提问于 2015-08-27 23:20:36
回答 2查看 317关注 0票数 1

在下面的ant脚本片段中,我正在处理目录中的所有conn.xml文件,以确定是否存在MyDB以外的DB条目。此代码只设置最后一个匹配的DB名称,由于正常情况下只有一个这样的文件,所以仍然可以。但是,我想要命名确切的文件(在所有包括的文件),其中有这个无效的条目。

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

在复制命令的“路径”字段中,我可以使用什么参数来打印当前的文件名?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-28 19:21:45

代码语言:javascript
复制
<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>

上面的一个是新增加的目标。下面是在循环中调用它的原始片段:

代码语言:javascript
复制
<foreach target="check_connection_violations" param="file">
    <fileset dir="${srcdir}/../apps" includes="*/conn.xml"/>
</foreach>
票数 1
EN

Stack Overflow用户

发布于 2015-08-28 09:31:55

only任务副本的path属性只保存要复制的元素的XPath引用。

如果要捕获所有匹配项,则需要设置xmltask副本的附加属性,

请参见xmltask手册

当设置为true时,追加到给定的缓冲区或属性。您只能在创建新属性时追加,因为Ant属性是不可变的(即当XPath解析为多个文本节点时)。

代码语言:javascript
复制
<copy path="//Reference[@name!='MyDB']/@name" attrvalue="true" property="bad_connection_name" append="true"/>

您还可以设置一个propertySeparator,默认=‘,’

但是,获得所有带有坏连接字符串的文件的更简单的方法是使用带有选择器的文件集,如下所示:

代码语言:javascript
复制
<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选择器而不是包含

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32260958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档