[英](saxon dtd)java.net.SocketException: Unexpected end of file fromserver
I use Saxon(Java) to convert *.xhtml
to *.xml
. 我使用Saxon(Java)将
*.xhtml
转换为*.xml
。
Here is my java code: 这是我的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);
Because there is DTD in the *.xhtml
file, like: 因为
*.xhtml
文件中包含DTD,例如:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
The error: 错误:
java.net.SocketException: Unexpected end of file from server
I want to know: 我想知道:
1) How to simply disable the dtd? 1)如何简单地禁用DTD?
2) If not, how to set catalog file(mapping dtd to local) for saxon in Java program? 2)如果没有,如何在Java程序中为saxon设置目录文件(将dtd映射到本地)? Any example?
有什么例子吗?
Thanks. 谢谢。
Finally, I know how to implement it. 最后,我知道如何实现它。
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.