Ant-check节点存在于xml文件中

时间:2016-10-17 18:20:38

标签: xml xslt ant

我有一个ant目标,它获取一系列xml文件并使用xslt转换为html。

示例输入文件:

<doc>
    <national>
        <doc-type>nat</doc-type>
    </national>
    <section>
        <para>text</para>
    </section>
</doc>

<doc>
    <regional>
        <doc-type>reg</doc-type>
    </regional>
    <section>
        <para>text</para>
    </section>
</doc>

运行ant文件后,这些文件应转换为html。 (变换已经使用xslt编写)

示例输出:

<html>
    <head>nat</head>
    <body>text</body>
</html>

这是我的蚂蚁部分目标,

<macrodef name="transform-to-html">
  <attribute name="xml"/>

  <sequential>
    <local name="filename"/>
    <basename file="@{xml}" property="filename" suffix=".xml"/>

    <echo>Source:  @{xml}</echo>

    <xmltask source="@{xml}">
        <copy path="//national//doc-type/text()" property="national-exists"/>
        <copy path="//regional//doc-type/text()" property="regional-exists"/>
        <copy path="//international//doc-type/text()" property="international-exists"/>
    </xmltask>

    <local name="html"/>

    <property name="html" location="${temp.html.dir}/${filename}.html"/>

    <if>
    <isset property="national-exists"/>
    <then>
        <transform input="@{xml}" xsl="${national.xsl.file}" output="${html}" catalog="${html.catalog.file}" />
    </then>
    <isset property="regional-exists"/>
    <then>
        <transform input="@{xml}" xsl="${regional.xsl.file}" output="${html}" catalog="${html.catalog.file}" />
    </then>
    <isset property="international-exists"/>
    <then>
        <transform input="@{xml}" xsl="${international.xsl.file}" output="${html}" catalog="${html.catalog.file}" />
    </then>
  </if>

  </sequential>
</macrodef>

检索xml文件的序列,并使用$ {html.xsl.file}转换为html格式。

输入xml文件中的

我有3个类别。

  1. 内容中有<national>个节点
  2. 内容中有<regional>个节点
  3. 内容中有<international>个节点
  4. 我需要的是,如果输入xml具有<national>节点,则必须使用national.xsl文件运行,如果输入xml具有<regional>节点,则必须使用regional.xsl运行并且如果输入xml具有<international>节点必须与international.xsl一起运行。

    但是这失败了,给出错误信息是'属性名称未定义'.. 任何建议如何解决此问题,或者任何人都可以建议如何使用ant检查xml文档中是否存在特定节点。

0 个答案:

没有答案