我试图使用xmltask来修改子目录中的文件:
project/path/to/file.xml该文件引用如下所示的DTD:
<!DOCTYPE data SYSTEM "mydtd.dtd">我没有修改这些文件的灵活性。
这个DTD存储在同一个子目录中,该子目录一直运行良好:
project/path/to/mydtd.dtd不幸的是,xmltask试图在我的项目的顶层目录中找到dtd,这是我的构建文件所在的位置,也是我运行的位置:
xmltask java.io.FileNotFoundException: /home/me/project/mydtd.dtd (系统找不到指定的文件)
我在xmltask文档中看到,我可以使用xmlcatalog元素纠正这个问题,以告诉它在哪里查找该文件。但是我需要使用dtd元素,我只能找到这个元素的示例,而不是文档;这些示例只显示一个publicId,如果我正确地理解了XML,那么这个文档就没有publicId了。无论如何,我不应该指定这一点,对吧,因为我的文档已经说我的DTD存储在本地,并显示在正确的位置?
为什么xmltask找不到DTD?纠正或解决这种情况的最佳方法是什么?
发布于 2010-01-08 21:08:37
XML目录是实现这个目标的方法,它需要更多的毅力。
正如您正确指出的,标准Ant <XmlCatalog>类型只允许您在使用内联语法时指定公共DTD引用,这对您没有任何用处。但是,<XmlCatalog>还允许您指定一个标准OASIS语法目录,它要丰富得多,包括解析系统DTD引用。
OASIS目录(完整规范这里)如下所示:
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<system systemId="mydtd.dtd" uri="project/path/to/mydtd.dtd"/>
</catalog>然后,您可以从<XmlCatalog>引用此目录。
<xmlcatalog refid="commonDTDs"/>
<catalogpath>
<pathelement location="path/to/oasis.catalog"/>
</catalogpath>
</xmlcatalog>就是这样。构建一个可重用的OASIS目录文件,并从各种与XML相关的Ant任务中引用它,这是一个好主意,所有这些任务都可以使用<XmlCatalog>。
发布于 2010-02-02 17:45:16
作为另一种选择,我似乎可以跳过整个验证,方法是创建一个与DVD文件同名的空白文件,然后在完成时删除该文件。我很可能会走那条路,而不是使用目录。
发布于 2009-09-29 13:53:18
你试过:
<!DOCTYPE data SYSTEM "./path/to/mydtd.dtd">?还是一条绝对的道路?
此外,您还可以找到<dtd> description 这里。
https://stackoverflow.com/questions/1492676
复制相似问题