에 절대화되는 것을의 EntityResolver # 것으로 resolveEntity에서 '시스템 ID'(문자열 주어, publicId, 문자열 시스템 ID)를 방지하기 위해 어떻게하면 모든 엔티티를 해결하기 위해 다음과 같은 XML 문서를 구문 분석 할 :자바 : 현재 작업 디렉토리
<!DOCTYPE doc SYSTEM 'mydoc.dtd'>
<doc>&title;</doc>
private static class MyEntityResolver
{
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException
{
// At this point, systemId is always absolutized to the current working directory,
// even though the XML document specified it as relative.
// E.g. "file:///H:/mydoc.dtd" instead of just "mydoc.dtd"
// Why??? How can I prevent this???
SgmlEntity entity = findEntityFromDatabase(systemId);
InputSource is = new InputSource(new ByteArrayInputStream(entity.getContents()));
is.setPublicId(publicId);
is.setSystemId(systemId);
return is;
}
}
내가 모두 사용하여 DOM (DocumentBuilder를) 및 SAX (의 XMLReader를) 시도 :
내의 EntityResolver는 데이터베이스에서 주어진 시스템의 ID와 외부 엔티티를 가져올 것으로 예상되는 다음 해상도, 그림은 아래를 참조 할 엔티티 리졸버를 MyEnt로 설정합니다. ityResolver (즉, setEntityResolver(new MyEntityResolver())
), MyEntityResolver#resolveEntity(String publicId, String systemId)
의 systemId
은 항상 현재 작업 디렉토리로 절대화됩니다.
나는 또한 setFeature("http://xml.org/sax/features/resolve-dtd-uris", false);
을 호출 해 보았지만 아무런 도움이되지 못했습니다.
그래서 내가 원하는 것을 어떻게 얻을 수 있습니까?
감사합니다. the EntityResolver Javadocs에서