java - (撒克逊 dtd)java.net.SocketException : Unexpected end of file fromserver

标签 java dtd saxon socketexception

我使用 Saxon(Java) 将 *.xhtml 转换为 *.xml

这是我的java代码:

System.setProperty("javax.xml.transform.TransformerFactory","net.sf.saxon.TransformerFactoryImpl");
TransformerFactory tfactory = TransformerFactory.newInstance();
System.out.println("load xslt file");
Templates templates = tfactory.newTemplates(new StreamSource(xsltFile));

Transformer transformer = templates.newTransformer();
Result result = new StreamResult(new File(filtTempXml));
transformer.transform(new StreamSource(xmlFile), result);

因为*.xhtml文件中有DTD,如:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

错误:

 java.net.SocketException: Unexpected end of file from server

我想知道:

1) 如何简单地禁用 dtd?

2) 如果没有,如何在Java程序中为saxon设置目录文件(将dtd映射到本地)?有什么例子吗?

谢谢。

最佳答案

终于知道如何实现了。

SAXParserFactory parserFactory = SAXParserFactory.newInstance();
SAXParser saxParser = parserFactory.newSAXParser();
XMLReader xmlReader = saxParser.getXMLReader();

EntityResolver entityReolver = new EntityResolver() {
    public InputSource resolveEntity(String publicId, String systemId) {
    try {
        System.out.println("Entity resolving systemID... " + publicId);
        if (systemId.indexOf((".dtd")) != -1) {
            System.out.println("Entity Resolved...");
            return new InputSource(new ByteArrayInputStream("<?xml version='1.0' encoding='UTF-8'?>".getBytes()));
        }
    } catch (Exception e) {
    }
    return null;
    }
};
xmlReader.setEntityResolver(entityReolver);

SAXSource saxSource = new SAXSource(xmlReader, SAXSource.sourceToInputSource(new   StreamSource(xmlFile)));
transformer.transform(saxSource, result);

关于java - (撒克逊 dtd)java.net.SocketException : Unexpected end of file fromserver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7789004/

相关文章:

java - Seam session 范围组件在下一个请求中消失

java - 如何为Java属性中的多个键设置相同的值?

java - 从 activemq.xml 文件中读取 Broker 配置并使用 Java 代码启动 Broker

c# - 如何解析不是 100% 有效的 XHTML 文件?

XML 验证 - 如果那么

java - Saxon XML 验证 : Cannot delete XML File, 验证失败时

java - 我可以(轻松地)使用第三方库来处理 Java RMI 的序列化吗?

针对 DTD 的 XML 验证

java - xslt 函数 format-dateTime 在转换为 PDF 时不起作用

xml - XSLT 流与 xsl :iterate correct way