2011-10-17 6 views
1

나는 Saxon (Java)을 사용하여 *.xhtml*.xml으로 변환합니다.(saxon dtd) java.net.SocketException : 서버에서 예상치 못한 파일 끝

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)을 설정하는 방법은 무엇입니까? 어떤예요?

감사합니다.

+1

체크 아웃 http://stackoverflow.com/questions/1572808/java-xml-xslt-prevent-dtd-validation – alexbrn

답변

1

마지막으로 구현 방법을 알고 있습니다.

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); 
관련 문제