我有一个xml文件“versionreferance.xml”。下面是编码
<?xml version="1.0" encoding="utf-8"?>
<!-- Update "revision" value to -1 when the next build is intended to have its revision as 0. This needs to be done for patch/release builds-->
<BuildVersions>
<property name="major" value="1" />
<property name="minor" value="0" />
<property name="patch" value="0" />
<property name="revision" value="93" />
</BuildVersions>
另一个是我的ant-build.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<project name="xmlproperty-demo" default="init">
<xmlproperty file="versionreferance.xml" collapseAttributes="true" />
<echo>Major : ${BuildVersions.major}</echo>
<echo>Minor : ${BuildVersions.minor}</echo>
<echo>Patch : ${BuildVersions.patch}</echo>
<echo>Revision : ${BuildVersions.revision}</echo>
</project>
我没有在输出中获得该值。
我想动态获取versionReference.xml的路径路径,它将与antbuild.xml位于不同的位置
开发\生成\ VersionReference.xml
开发\ Src \ JAAS API \ antbuild.xml
它应该是动态的。我可以从代码下面获取值。但它不是动态的。
<?xml version="1.0" encoding="UTF-8"?>
<project name="xmlproperty-demo" default="init">
<xmlproperty file="C:\\Development\\Build\\versionreferance.xml" collapseAttributes="true" />
<echo>Major : ${BuildVersions.major}</echo>
<echo>Minor : ${BuildVersions.minor}</echo>
<echo>Patch : ${BuildVersions.patch}</echo>
<echo>Revision : ${BuildVersions.revision}</echo>
</project>
我想只以这种格式获取值。
<?xml version="1.0" encoding="utf-8"?>
<!-- Update "revision" value to -1 when the next build is intended to have its revision as 0. This needs to be done for patch/release builds-->
<BuildVersions>
<property name="major" value="1" />
<property name="minor" value="0" />
<property name="patch" value="0" />
<property name="revision" value="93" />
</BuildVersions>
答案 0 :(得分:2)
我强烈建议您使用免费的第三方XmlTask库:
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask" />
<xmltask>
<fileset file="versionreferance.xml"/>
<copy path="/BuildVersions/property[@name = 'major']/@value" property="BuildVersions.major"/>
<copy path="/BuildVersions/property[@name = 'minor']/@value" property="BuildVersions.minor"/>
<copy path="/BuildVersions/property[@name = 'patch']/@value" property="BuildVersions.patch"/>
<copy path="/BuildVersions/property[@name = 'revision']/@value" property="BuildVersions.revision"/>
</xmltask>
<echo>Major : ${BuildVersions.major}</echo>
<echo>Minor : ${BuildVersions.minor}</echo>
<echo>Patch : ${BuildVersions.patch}</echo>
<echo>Revision : ${BuildVersions.revision}</echo>
run:
[echo] Major : 1
[echo] Minor : 0
[echo] Patch : 0
[echo] Revision : 93
答案 1 :(得分:1)
如果在<echoproperties/>
行之后添加<xmlproperty>
,您应该看到属性已加载但未按预期加载。他们将是这样的:
BuildVersions.property=,,,
BuildVersions.property.name=major,minor,patch,revision
BuildVersions.property.value=1,0,0,93
这是因为属性基于节点名称,在您的情况下,您有四个&#34;属性的实例&#34;子节点不是唯一的。您最好的选择可能是更改xml,例如:
<BuildVersions>
<major>1</major>
....
</BuildVersions>
答案 2 :(得分:1)
当您在xml文件中使用xmlproperty
collapseAttributes="true"
时,它会展平嵌套元素。
详细信息:https://ant.apache.org/manual/Tasks/xmlproperty.html
所以只说${BuildVersions.major}
没有给出或打印值为1.因为你有相同的命名xml元素'prooerty'你将无法获得单一属性的值
例如,在您的情况下,${BuildVersions.property.name}
将打印“major,minor,patch,revision
”
您可以重新设计versionreferance.xml以使xmlproperty正常工作。或者您可以将其作为属性文件&amp;说<property file="your.properties.file"/>
&amp;将它们作为普通属性访问!
答案 3 :(得分:0)
如果 VersionReference.xml 与您在 antbuild.xml 对应的问题中提到的完全相同。
我建议你用“.. \ .. \ Build \ VersionReference.xml”改变你的绝对路径(如上所述),它对应于basedir =“。”在你的项目中
这应该可以正常工作。
考虑你的字符串格式要求。
我认为默认的逗号(,)分隔值可以替换为点(。)或根据您的要求通过以下语法进行操作
<propertyregex property="propB"
input="${propA}"
regexp=","
replace="."
global="true" />
请在此链接上找到更多信息: Replacing characters in Ant property
希望这有帮助。