Tôi nhận được tệp dtd và tôi không thể xóa nó. Khi tôi cố gắng phân tích nó trong Java tôi nhận được "Gây ra bởi: java.net.SocketException: Mạng là không thể truy cập: kết nối", bởi vì dtd từ xa của nó. thế nào tôi có thể vô hiệu hóa bằng cách nào đó kiểm tra dtd?làm thế nào để vô hiệu hóa dtd khi chạy trong xpath của java?
Trả lời
Bạn sẽ có thể chỉ định EntityResolver của riêng mình hoặc sử dụng các tính năng cụ thể của trình phân tích cú pháp của mình? Xem here để biết một số cách tiếp cận.
Một ví dụ hoàn chỉnh hơn:
<?xml version="1.0"?>
<!DOCTYPE foo PUBLIC "//FOO//" "foo.dtd">
<foo>
<bar>Value</bar>
</foo>
Và xpath sử dụng:
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);
}
}
Hope this helps ...
Tôi có vấn đề này trước đó. Tôi đã giải quyết nó bằng cách tải xuống và lưu trữ một bản sao cục bộ của DTD và sau đó xác thực đối với bản sao cục bộ. Bạn cần chỉnh sửa tệp XML để trỏ tới bản sao cục bộ.
<!DOCTYPE root-element SYSTEM "filename">
Ít biết thêm ở đây: http://www.w3schools.com/dtd/dtd_intro.asp
Tôi nghĩ bạn cũng có thể tự thiết lập một số loại tài sản validateOnParse là "false" trong phân tích cú pháp của bạn. Phụ thuộc vào thư viện bạn đang sử dụng để phân tích cú pháp XML. Thông tin
này đã làm việc cho tôi:
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();
}
1 - Đây là câu trả lời tốt nhất ở đây - tuy nhiên chỉ đủ dùng dòng này: '' saxfac.setFeature ("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); '' –
- 1. Làm thế nào để vô hiệu hóa javax.swing.JButton trong java?
- 2. Làm thế nào để vô hiệu hóa textarea TinyMCE của
- 3. làm thế nào để vô hiệu hóa fling của scrollView
- 4. Làm thế nào để vô hiệu hóa rìa trong Emacs?
- 5. Làm thế nào để vô hiệu hóa nút trong UIActionSheet?
- 6. Làm thế nào để vô hiệu hóa subversion trong netbeans
- 7. Làm thế nào để vô hiệu hóa mod_deflate trong apache2?
- 8. Làm thế nào để vô hiệu hóa PerfWatson trong VS2012?
- 9. WPF Làm thế nào để vô hiệu hóa DropShadowEffect
- 10. Làm thế nào để biết khi nào để vô hiệu hóa một 'NSTimer`
- 11. Làm thế nào để vô hiệu hóa OUTFILE và INFILE?
- 12. C# Làm thế nào để vô hiệu hóa một phím
- 13. Làm thế nào để vô hiệu hóa cảnh báo #pragma?
- 14. Làm thế nào để vô hiệu hóa Tomcat trang chủ
- 15. Làm thế nào để vô hiệu hóa google maps kéo
- 16. Làm thế nào vô hiệu hóa RequiredFieldValidator trong script
- 17. Làm thế nào để vô hiệu hóa bộ đệm sâu?
- 18. Làm thế nào để vô hiệu hóa DrawerLayout Shadow
- 19. emacs:. Làm thế nào để vô hiệu hóa # file tạo
- 20. Làm thế nào để vô hiệu hóa cảnh báo python
- 21. Làm thế nào để vô hiệu hóa nội địa hoá của các lỗi trong Visual Studio?
- 22. Làm cách nào để vô hiệu hóa các add-on trong firefox khi sử dụng selenium
- 23. Làm cách nào để vô hiệu hóa "Khởi tạo công cụ Java" khi khởi động Eclipse?
- 24. Làm thế nào để vô hiệu hóa Ajax trong jQuery Mobile trước khi tải trang?
- 25. Làm thế nào để vô hiệu hóa hiệu ứng Di chuột và Ngói của ListView?
- 26. Làm thế nào để vô hiệu hóa định dạng tự động khi lưu trong Eclipse?
- 27. Làm thế nào để vô hiệu hóa pop up bảo mật của MS Outlook trong C#?
- 28. Java Swing - Làm thế nào để vô hiệu hóa một JPanel?
- 29. PMD với Maven - Làm thế nào để vô hiệu hóa một quy tắc trong một ruleset?
- 30. Làm thế nào để vô hiệu hóa làm nổi bật của biểu tượng ứng dụng?
Cảm ơn, điều này làm giảm một số kiểm tra đơn vị tôi đang làm với hệ số 7. –