首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于验证错误,Ant xmlproperty任务失败。

由于验证错误,Ant xmlproperty任务失败。
EN

Stack Overflow用户
提问于 2016-09-22 13:13:06
回答 1查看 377关注 0票数 2

我想从DITA映射文件中提取一个应用程序版本。ditamap文件是有效的,如下所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "map.dtd">
<map id="user-manual">
    <title><ph keyref="product"/> User Manual</title>
    <topicmeta>
        <prodinfo>
            <prodname><keyword keyref="product"/></prodname>
            <vrmlist>
                <vrm version="4" release="3" modification="0"/>
            </vrmlist>
        </prodinfo>
    </topicmeta>
    <!--
        [...]
    -->
</map>

我想获得的信息在<vrm>元素中。

“小菜一碟,”我心里想。所以我使用Ant的<xmlproperty>任务来加载这个XML文件。

代码语言:javascript
复制
<project default="test">
    <!-- notice @validate -->
    <xmlproperty file="path/to/user-manual.ditamap" validate="false"/>
    <target name="test">
        <echo>${map.topicmeta.prodinfo.vrmlist.vrm(version)}</echo>
    </target>
</project>

我不想让它验证,因为Ant不会找到map.dtd。

加载文件将返回一个错误:

代码语言:javascript
复制
java.io.FileNotFoundException: /home/user/user-manual/map.dtd (No such file or directory)

如果我删除了<!DOCTYPE>声明,或者添加了一个嵌套的<xmlcatalog>,其中包含了DTD的路径,那么文件就会加载,并且我可以使用它中的属性。

我用Ant 1.7.1和1.9.4测试了这一点。这是Ant的bug吗,还是我误解了Ant如何加载XML属性和validate属性的用途?

,我怎样才能让蚂蚁服从我的意志?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-22 16:42:27

我建议不要为此使用<xmlproperty>。请看一下文档

例如,在启用了语义属性处理之后,这个XML属性文件:

代码语言:javascript
复制
<root>
  <properties>
    <foo location="bar"/>
    <quux>${root.properties.foo}</quux>
  </properties>
</root>

大致相当于build.xml文件中的以下片段:

代码语言:javascript
复制
<property name="root.properties.foo" location="bar"/>
<property name="root.properties.quux" value="${root.properties.foo}"/>

因此,您设置的属性的名称是使用它们到根元素的路径生成的,因此它们依赖于DITA Map的结构。但是DITA中的许多元素可能在DITA地图上的不同位置设置。这意味着,如果将元数据移动到另一个父元素,则属性名称将更改,生成失败。这可能不是你想要的。

我建议通过XSLT获取这些值,而不是设置属性。例如,您可以这样说:“使用一个简单的//foo[1] XPath选择器,给我这个元素的第一次出现。此外,在设置属性之前,您可以使用XSLT和XPath来分割值、格式化日期等等。

Update您可以使用oops咨询公司Ant xmltask进行此操作。使用<copy>设置属性非常容易

代码语言:javascript
复制
<copy path="//critdates/created/@date"
            property="document.date"
            append="false"/>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39640092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档