파일에 dtd가 있는데 제거 할 수 없습니다. 내가 자바에서 구문 분석하려고하면 "원인 : java.net.SocketException : 네트워크 연결할 수 없습니다 : 연결", 원격 dtd 때문에. 어떻게 든 dtd 검사를 비활성화 할 수 있습니까?자바의 xpath에서 런타임시 dtd를 비활성화하는 방법은 무엇입니까?
13
A
답변
18
고유 한 EntityResolver를 지정하거나 파서의 특정 기능을 사용할 수 있어야합니까? 일부 접근법에 대해서는 here을 참조하십시오.
더 완벽한 예 :
<?xml version="1.0"?>
<!DOCTYPE foo PUBLIC "//FOO//" "foo.dtd">
<foo>
<bar>Value</bar>
</foo>
그리고 XPath를 사용 :이 도움이
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class Main {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setEntityResolver(new EntityResolver() {
@Override
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException {
System.out.println("Ignoring " + publicId + ", " + systemId);
return new InputSource(new StringReader(""));
}
});
Document document = builder.parse(new File("src/foo.xml"));
XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
String content = xpath.evaluate("/foo/bar/text()", document
.getDocumentElement());
System.out.println(content);
}
}
희망 ... 내가 전에이 문제를 가지고
2
. DTD의 로컬 복사본을 다운로드하여 저장 한 다음 로컬 복사본에 대해 유효성을 검사하여 해결했습니다. 로컬 복사본을 가리 키도록 XML 파일을 편집해야합니다. 여기
<!DOCTYPE root-element SYSTEM "filename">
조금 더 많은 정보를 원하시면 : http://www.w3schools.com/dtd/dtd_intro.asp
난 당신이 수동으로 파서에서 "false"로 validateOnParse 속성의 어떤 종류를 설정할 수 있다고 생각합니다. XML을 파싱하는 데 사용하는 라이브러리에 따라 다릅니다. 여기
13
이 나를 위해 일한 :
SAXParserFactory saxfac = SAXParserFactory.newInstance();
saxfac.setValidating(false);
try {
saxfac.setFeature("http://xml.org/sax/features/validation", false);
saxfac.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
saxfac.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
saxfac.setFeature("http://xml.org/sax/features/external-general-entities", false);
saxfac.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
}
catch (Exception e1) {
e1.printStackTrace();
}
+3
하나의 요인에 의해 수행 된 일부 단위 테스트를 감소 -이 여기에 가장 좋은 대답은 - 그러나이 줄만을 사용하면 충분합니다 :''saxfac.setFeature ("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);'' –
관련 문제
- 1. 위젯을 비활성화하는 방법은 무엇입니까?
- 2. xpath에서 요소 유형을 얻는 방법은 무엇입니까?
- 3. 포논을 비활성화하는 방법은 무엇입니까?
- 4. DTD를 공개해야하는시기
- 5. 런타임시 route를 제거하는 방법은 무엇입니까?
- 6. 런타임시 DataTemplate을 만드는 방법은 무엇입니까?
- 7. 런타임시 CurrentCulture를 변경하는 방법은 무엇입니까?
- 8. 런타임시 DLL을 참조하는 방법은 무엇입니까?
- 9. 런타임시 jre를 선택하는 방법은 무엇입니까?
- 10. 런타임시 '합계'조건을 변경하는 방법은 무엇입니까?
- 11. 런타임시 bitmapfield를 추가하는 방법은 무엇입니까?
- 12. 런타임시 패키지를 만드는 방법은 무엇입니까?
- 13. XPath에서 값을 결합하는 방법
- 14. UITextField를 비활성화하는 쉬운 방법은 무엇입니까?
- 15. jqGrid에서 자동로드를 비활성화하는 방법은 무엇입니까?
- 16. 깊이 버퍼를 비활성화하는 방법은 무엇입니까?
- 17. 레일에서 캐싱을 비활성화하는 방법은 무엇입니까?
- 18. 데이터로드시 화면을 비활성화하는 방법은 무엇입니까?
- 19. django.contrib.auth를 완전히 비활성화하는 방법은 무엇입니까?
- 20. WM6.5.3 제스처를 비활성화하는 방법은 무엇입니까?
- 21. jQuery에서 CSRF를 비활성화하는 방법은 무엇입니까?
- 22. gridlayout에서 요소를 비활성화하는 방법은 무엇입니까?
- 23. GWT ValueListBox를 비활성화하는 방법은 무엇입니까?
- 24. ListBox에서 ScrollViewer를 비활성화하는 방법은 무엇입니까?
- 25. Dwoo 캐시를 비활성화하는 방법은 무엇입니까?
- 26. 쿠키 작성을 비활성화하는 방법은 무엇입니까?
- 27. 자동 회전을 비활성화하는 방법은 무엇입니까?
- 28. iPhone에서 UIView를 비활성화하는 방법은 무엇입니까?
- 29. 안드로이드에서 GestureListener를 비활성화하는 방법은 무엇입니까?
- 30. JavaScript에서 ondblclick을 비활성화하는 방법은 무엇입니까?
덕분에,이 내가 7 –