我正在尝试在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>
使用此属性文件,我可以轻松访问Domain&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目标时,出现以下错误。
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}
答案 0 :(得分:0)
当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