2015-01-19 4 views
0

내가 같은 문제 asked here으로 실행 한 :의 경로를 지정하지 않고 상대 DTD와 XML 파일을 구문 분석 명시 적으로

<?xml version="1.0"?> 
<!DOCTYPE convert SYSTEM "someRules.dtd"> 

: 나는 같은 DTD 파일에 상대 경로를 포함하는 XML 파일을 구문 분석 할 연결된 질문에 대답이 있습니다.

db.setEntityResolver(new EntityResolver() { 
    @Override 
    public InputSource resolveEntity(String publicId, String systemId) 
      throws SAXException, IOException { 
     if (systemId.contains("schema.dtd")) { 
      return new InputSource(new FileReader("/path/to/schema.dtd")); 
     } else { 
      return null; 
     } 
    } 
}); 

내가 schema.dtd/path/to/schema.dtd가 명시 적으로 쓰기보다는 (내 경우에는이 someRules.dtd 될 것입니다) 그것을 XML 파일을 가져 와서 동적으로에 대한 검색하지 않도록합니다 : 그것은이 같은 명시 적 이름과 경로를 지정하지만 XML 문서에 지정된 경로 나중에 someRules.dtd의 위치를 ​​변경하기로 결정할 때 Java 코드를 변경하지 않아도됩니다. 나는 someRules.dtd을 움직여야하고 XML 문서에서 경로를 조정해야합니다.

어떻게하면됩니까?

답변

0

XML에서 DTD의 절대 경로를 지정하면 안됩니다.

(테스트 목적으로) 실제로 수행해야하는 경우 전체 경로는 resolveEntity 함수의 systemId String에 저장됩니다.

if(systemId.endsWith(".dtd")){ 
     return new InputSource(new FileReader(systemId)); 
} 

dtd를 컴퓨터에서 사용할 수있는 한 작동해야하지만 끔찍한 디자인입니다.

대체 솔루션으로 DTD 카탈로그 파일을 검토해야합니다.