我有一个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个类别。
<national>
个节点<regional>
个节点<international>
个节点我需要的是,如果输入xml具有<national>
节点,则必须使用national.xsl文件运行,如果输入xml具有<regional>
节点,则必须使用regional.xsl运行并且如果输入xml具有<international>
节点必须与international.xsl一起运行。
但是这失败了,给出错误信息是'属性名称未定义'.. 任何建议如何解决此问题,或者任何人都可以建议如何使用ant检查xml文档中是否存在特定节点。