我正在使用XSLT 2.0将XML文件转换为XHTML。我正在使用saxon9处理器进行转换。在转换时,出现如下错误:忽略DOCTYPE声明
java.io.FileNotFoundException:c:\ test \ book.dtd(系统找不到指定的文件)。
它正在寻找一个DTD,因为XML具有带PUBLIC ID的DOCTYPE声明。
我正在寻找解决方案来解决这个错误,但我无法做到这一点。我尝试了resolver.jar。
我已经下载了resolver.jar并放置在saxon.jar所在的同一位置,并尝试了以下命令行。
java -cp c:/saxon9/saxon9.jar;c:saxon9/resolver.jar; net.sf.saxon.Transform -x:org.apache.xml.resolver.tools.ResolvingXMLReader -t -s:c:/test/sample2.xml -xsl:c:/test/body.xsl >c:/test/out /output.html
我得到相同的错误信息。
我提到几个网站使用resolver.jar,但我不清楚与指令,并没有得到所需的输出。我发现http://sourceforge.net/apps/mediawiki/saxon/index.php?title=XML_Catalogs。 这是使用resolver.jar省略DOCTYPE声明的正确解决方案吗?如果对如何使用这个有帮助,或者有其他可以使用的方法吗?
我的XML文件看起来像
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE chapter PUBLIC "-//ES//DTD book DTD version 5.3.0//EN//XML" "book.dtd" [<! ENTITY fx1 SYSTEM "fx1" NDATA IMAGE>]>
<chapter>
<info>
<ce:link locator="fx1"/>…
我创建catalog.xml文件像下面并存储在同一个位置。
<catalog prefer="public" xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<system systemId="-//ES//DTD book DTD version 5.3.0//EN//XML" uri="book.dtd"/>
</catalog>
我还定义在环境变量classpath中像:
c:\saxon9\saxon9.jar;c:\saxon\resolver.jarUsed the following command line for conversion(referred http://sourceforge.net/apps/mediawiki/saxon/index.php?title=XML_Catalogs)
但我仍然面临着同样的问题,我无法找到其确切的问题是,什么别的需要去做?
C:\>java -cp c:\saxon9\saxon9.jar;c:\saxon9\resolver.jar -Dxml.catalog.files=c:\saxon9\catalog.xml net.sf.saxon.Transform -r:org.apache.xml.resolver.tools.CatalogResolver -x:org.apache.xml.resolver.tools.ResolvingXMLReader -y:org.apache.xml.resolver.tools.ResolvingXMLReader -xsl:c:\test\body1.xsl -s:c:\test\Main.xml -o:c:\test\output.html
但收到以下错误
Error java.io.FileNotFoundException: c:\test\book.dtd (The system cannot find the file specified)
Transformation failed: Run-time errors were reported
及时帮助非常感谢,因为这是非常紧迫......
公共ID( “ - // ES // DTD书DTD版本5.3.0 // EN // XML”)是由[爱思唯尔(HTTP发布的DTD://cdn.elsevier。 COM /资产/ text_file/0018/111339/bk53_book530_dtd.txt)。它不是独立的,因为它牵扯到其他声明。没有完整的发行版,你不会走得太远。我建议完全删除doctype声明,并使用非验证解析器与撒克逊。 – arayq2
此外,内部子集中的实体声明被破坏:'<!'之间不应有空格和“ENTITY”。即使有了这个修复,仍然存在没有声明名为'IMAGE'的符号的问题。 – arayq2
在应该是的目录中。但是,您的真正问题可能是您根本没有Elsevier DTD。 –
arayq2