【问题标题】:Retrieving Xml element's attribute value based on top level element's attribute value根据顶级元素的属性值检索 Xml 元素的属性值
【发布时间】:2013-11-08 06:32:36
【问题描述】:

我的示例 Xml 如下所示:

<root>
    <Month name="Jan">
        <foo someAttr="bar"/>
    </Month>

    <Month name="July">
        <foo someAttr="zzz"/>
    </Month>

</root>

当我说:

<xmlproperty file="${root.dir}/my.xml" keeproot="false"/>

<echo message="Month.foo : ${Month.foo(someAttr)}"/> 

打印我 bar,zzz。我想根据月份名称检索 foo xml 元素的 someAttr 值。例如让我Month.foo(someAttr) where Month.name="Jan"

Ant 是否支持某种方法,或者我应该根据另一个相关查询使用 xslt 定义我的规则:xmlproperty and retrieving property value of xml element if specific attribute is present/set

【问题讨论】:

    标签: xml ant


    【解决方案1】:

    使用xmltask结合xpath,即:

    <project>
    <!-- Import XMLTask -->
    <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
    
    <macrodef name="grepxml">
     <attribute name="src"/>
     <attribute name="xpath"/>
     <attribute name="result"/>
     <sequential>
      <xmltask source="@{src}">
       <copy path=@{xpath}" property="@{result}"/>
      </xmltask>
     </sequential>
    </macrodef>
    
    <grepxml
     src="path/to/your/xml"
     xpath="string(//Month[@name='July']/foo/@*)"
     result="foobar"
    /> 
    
     <echo>$${foobar} => ${foobar}</echo>
    
    </project>
    

    将 grep 'zzz'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 2013-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多