Ben dosyada dtd var ve yerinden sökülemez. Java'da ayrıştırmayı denediğimde, "Neden: java.net.SocketException: Ağa erişilemiyor: bağlan", çünkü uzak dtd. bir şekilde dtd kontrolünü devre dışı bırakabilir miyim?java'nın xpath çalışma zamanında dtd nasıl devre dışı bırakılır?
cevap
Kendi EntityResolver belirtmek veya ayrıştırıcı belirli özelliklerini kullanmak gerekir? Bazı yaklaşımlar için bkz. here.
daha tam bir örnek:
<?xml version="1.0"?>
<!DOCTYPE foo PUBLIC "//FOO//" "foo.dtd">
<foo>
<bar>Value</bar>
</foo>
Ve xpath kullanımı: Bu yardımcı olur
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);
}
}
Umut ... Daha önce bu sorun vardı
. DTD'nin yerel bir kopyasını indirip saklayarak ve ardından yerel kopyaya göre doğrulayarak çözdüm. Yerel dosyayı işaret edecek şekilde XML dosyasını düzenlemeniz gerekir. Burada
<!DOCTYPE root-element SYSTEM "filename">
Biraz daha bilgi: http://www.w3schools.com/dtd/dtd_intro.asp
sana el ile de ayrıştırıcı "false" validateOnParse özelliğinin çeşit ayarlayabilirsiniz düşünüyorum. XML'yi ayrıştırmak için kullandığınız kitaplığa bağlıdır. Burada
diğer bilgiler: http://www.w3schools.com/dtd/dtd_validation.asp
Bu benim için çalıştı:
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 kat yapıyordu bazı birim testi azaltılmış - Bu burada en iyi cevaptır - ancak yalnızca hat kullanmak yeterlidir: ("http://apache.org/xml/features/nonvalidating/load-external-dtd" yanlış) '' saxfac.setFeature; ' –
- 1. Bazı koşullarda ActionBar.TabListener nasıl devre dışı bırakılır/devre dışı bırakılır
- 2. QPushButton nasıl devre dışı bırakılır
- 3. Oracle DB'de XML DTD doğrulaması nasıl devre dışı bırakılır? Ben sorgu seçme kısmında şu ifadeyi kullanıyorum
- 4. .NET: System.Transactions'da promosyonu nasıl devre dışı bırakılır?
- 5. DrawerLayout Gölge nasıl devre dışı bırakılır
- 6. Emacs'ta x yapıştırma nasıl devre dışı bırakılır
- 7. JQuery Mousewheel: Nasıl devre dışı bırakılır?
- 8. hız günlükleri nasıl devre dışı bırakılır
- 9. active_admin'in toplu eylemi nasıl devre dışı bırakılır?
- 10. Apache2'de mod_deflate nasıl devre dışı bırakılır?
- 11. GitLab: Otomatik başlangıç nasıl devre dışı bırakılır?
- 12. AngularJS'deki girdilerin kırpılması nasıl devre dışı bırakılır?
- 13. Emacs'te saçak nasıl devre dışı bırakılır?
- 14. ScrollView kaydırması nasıl devre dışı bırakılır?
- 15. Android'de ListView'i tıklayarak nasıl devre dışı bırakılır?
- 16. Bir kendogrid'de sayfalama nasıl devre dışı bırakılır
- 17. Django: modelinde sipariş nasıl devre dışı bırakılır
- 18. GWT ValueListBox nasıl devre dışı bırakılır?
- 19. Yammer sohbeti tamamen nasıl devre dışı bırakılır?
- 20. zaten ayırtılmış tarihler nasıl devre dışı bırakılır?
- 21. CakePHP Form Combo nasıl devre dışı bırakılır?
- 22. ContextMenuStrip'deki menü öğeleri nasıl devre dışı bırakılır?
- 23. Matris matrisi nasıl devre dışı bırakılır?
- 24. QTableView'de Düzenleme modu nasıl devre dışı bırakılır?
- 25. Geliştirme'de ActionMailer nasıl devre dışı bırakılır?
- 26. EGit geçici olarak nasıl devre dışı bırakılır?
- 27. İletişim kutuları nasıl devre dışı bırakılır - alert()?
- 28. Vue-cli'da ESLint nasıl devre dışı bırakılır?
- 29. Dokunma olayları SwipeRefreshLayout'ta nasıl devre dışı bırakılır?
- 30. Video çekimi nasıl devre dışı bırakılır UIImagePickerController
sayesinde bu ben 7. –