如果向ANT提供的XML属性文件具有重复XML元素,则如何在ANT中找到特定属性

  • 本文关键字:属性 ANT XML 文件 如果 元素 ant
  • 更新时间 :
  • 英文 :


我正在尝试阅读蚂蚁中的属性文件(xml(。

以下是示例数据。

<WebLogicDomain>
    <Domain>MyDomain</Domain>
    <Environment>DEV</Environment>
    <Servers>
        <Server id = '1'>
            <Host>Host1</Host>
            <Port>14100</Port>
            <AliasName>adminserver</AliasName>
            <IsAdmin>true</IsAdmin>
            <AdminServerHost>adminHost</AdminServerHost>
            <ClusterName>#NA</ClusterName>
            <MinHeap>512MB</MinHeap>
            <MaxHeap>2048MB</MaxHeap>
        </Server>
        <Server id = '2'>
            <Host>Host2</Host>
            <Port>14110</Port>
            <AliasName>managedserver01</AliasName>
            <IsAdmin>false</IsAdmin>
            <AdminServerHost>adminHost</AdminServerHost>
            <ClusterName>Cluster1</ClusterName>
            <MinHeap>512MB</MinHeap>
            <MaxHeap>2048MB</MaxHeap>
        </Server>
    </Servers>
</WebLogicDomain>

使用此属性文件,我可以轻松访问域&amp;环境属性,但是如何获得特定的服务器属性?如果我需要获得$ {weblogicdomain.servers.server [1] .host}即索引1的主机,我该如何获得?

follwoing无法正常工作。

<project name="SampleProject">
    <xmlproperty file="buildproperties.xml" />
    <target name="init">
        <echo> ******** XML property file has been loaded. ******** </echo>
        <echo> Domain name is : ${WebLogicDomain.Domain}</echo>
        <echo> Environment is : ${WebLogicDomain.Environment}</echo>
        <echo> First Server Details are : ${WebLogicDomain.Servers.Server[1].Host} </echo>
    </target>
</project>

当我运行初始目标时,我会出现以下错误。

init:
     [echo]  ******** XML property file has been loaded. ********
     [echo]  Domain name is : MyDomain
     [echo]  Environment is : DEV
     [echo]  First Server Details are : ${WebLogicDomain.Servers.Server[1].Host}

当ant的xmlproperty任务在同一位置找到具有相同名称的多个元素时,它将它们保存到单个属性中,作为逗号限制的列表。尝试使用xmlproperty任务查看构建已加载的所有属性以及相应的嵌套元素。不幸的是,DOM信息大多丢失了。您可以尝试依靠列出属性的顺序,使用正则提取相关信息,但这几乎肯定会很尴尬且不可靠。

<xmlproperty file="weblogic.xml" />
<echoproperties prefix="WebLogicDomain" />

输出:

[echoproperties] #Ant properties
[echoproperties] #Thu Feb 15 16:42:17 PST 2018
[echoproperties] WebLogicDomain.Domain=MyDomain
[echoproperties] WebLogicDomain.Environment=DEV
[echoproperties] WebLogicDomain.Servers.Server(id)=1,2
[echoproperties] WebLogicDomain.Servers.Server.AdminServerHost=adminHost,adminHost
[echoproperties] WebLogicDomain.Servers.Server.AliasName=adminserver,managedserver01
[echoproperties] WebLogicDomain.Servers.Server.ClusterName=#NA,Cluster1
[echoproperties] WebLogicDomain.Servers.Server.Host=Host1,Host2
[echoproperties] WebLogicDomain.Servers.Server.IsAdmin=true,false
[echoproperties] WebLogicDomain.Servers.Server.MaxHeap=2048MB,2048MB
[echoproperties] WebLogicDomain.Servers.Server.MinHeap=512MB,512MB
[echoproperties] WebLogicDomain.Servers.Server.Port=14100,14110

如果您确实需要进行比基本字符串检索更复杂的XML解析,则有一个名为XMLTASK的第三方插件可以实现这一目标。http://www.oopsconsultancy.com/software/xmltask/

<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask">        
    <classpath location="lib/xmltask.jar"/>
</taskdef>
<target name="default">
    <xmltask source="weblogic.xml">
        <copy path="WebLogicDomain/Servers/Server[@id='1']/Host/text()" property="server.1.host"/>
    </xmltask>
    <echo message="${server.1.host}" />
</target>

输出:

[echo] host1

相关内容

  • 没有找到相关文章

最新更新