如何用AntScript提取XML中指定sca:reference对应的interface属性值
使用Ant的xmltask提取指定sca:reference对应的interface属性值
我来帮你解决这个问题!要实现根据指定的sca:reference的name属性,提取其下属sca:interface.wsdl元素的interface属性值,你可以借助Ant的xmltask任务,结合命名空间绑定和精准的XPath表达式来完成。
步骤1:确保xmltask依赖可用
首先需要确保你的Ant环境中已经引入了xmltask的jar包,并在build.xml中声明任务:
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
步骤2:完整的Ant脚本示例
下面的脚本会接收一个reference.name参数,根据该参数定位目标节点并提取属性值:
<project name="ExtractInterface" default="extract-interface" basedir="."> <!-- 声明xmltask任务 --> <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/> <target name="extract-interface" description="Extract interface attribute based on reference name"> <!-- 检查是否传入了reference.name参数 --> <fail unless="reference.name" message="Please specify reference.name parameter, e.g.: ant extract-interface -Dreference.name=WorkListService_Consumer1"/> <xmltask source="your-composite.xml" report="true"> <!-- 绑定XML中的sca命名空间(必须和目标XML中的命名空间URI一致) --> <namespace prefix="sca" uri="http://www.osoa.org/xmlns/sca/1.0"/> <!-- 使用XPath定位目标节点,提取interface属性值并存储到变量 --> <copy path="//sca:reference[@name='${reference.name}']/sca:interface.wsdl/@interface" property="extracted.interface"/> </xmltask> <!-- 输出提取到的结果 --> <echo message="Extracted interface value: ${extracted.interface}"/> </target> </project>
关键说明
- 命名空间绑定:这是最容易踩坑的点!你的XML中使用了
sca前缀的命名空间,必须在xmltask中通过<namespace>元素绑定对应的URI,否则XPath无法识别带前缀的节点。 - XPath表达式解析:
//sca:reference[@name='${reference.name}']/sca:interface.wsdl/@interface的含义是://sca:reference:匹配所有sca:reference节点[@name='${reference.name}']:筛选出name属性等于输入参数的节点/sca:interface.wsdl/@interface:获取该节点下sca:interface.wsdl元素的interface属性值
测试运行
提取
WorkListService_Consumer1对应的interface时,执行命令:ant extract-interface -Dreference.name=WorkListService_Consumer1输出结果:
Extracted interface value: http://services.brm.n2.tibco.com#wsdl.interface(WorkListService)提取
CreateDailyTasks_Consumer1时:ant extract-interface -Dreference.name=CreateDailyTasks_Consumer1输出结果:
Extracted interface value: http://www.tibco.com/bs3.0/_8uwIINbzEeWTpucOvGErRg#wsdl.interface(CreateDailyTasks)
内容的提问来源于stack exchange,提问作者Shrijeet Sinha
相关产品推荐
相关产品推荐

