كيفية تعطيل اليومي في وقت التشغيل في كسباث جافا؟

StackOverflow https://stackoverflow.com/questions/243728

  •  04-07-2019
  •  | 
  •  

سؤال

وحصلت اليومي في ملف وأنا غير قادر على إزالته. عندما أحاول تحليل ذلك في جاوة أحصل على "الناجمة عن: java.net.SocketException: شبكة غير قابلة للوصول: ربط"، لأن اليومي لها بعد. يمكنني تعطيل التحقق اليومي بطريقة أو بأخرى؟

هل كانت مفيدة؟

المحلول

ويجب أن تكون قادرا على تحديد EntityResolver الخاصة بك، أو استخدام ميزات معينة من محلل لديك؟ انظر هنا لبعض المناهج.

وهناك مثال أكثر اكتمالا:

<?xml version="1.0"?>
<!DOCTYPE foo PUBLIC "//FOO//" "foo.dtd">
<foo>
    <bar>Value</bar>
</foo>

واستخدام كسباث:

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);
    }
}

ويساعد هذا الأمل ...

نصائح أخرى

وهذا عمل بالنسبة لي:

 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();
  }

وكان لي هذه المشكلة من قبل. I حلها عن طريق تحميل وتخزين نسخة محلية من DTD ومن ثم التحقق من صحة ضد النسخة المحلية. تحتاج إلى تحرير ملف XML للإشارة إلى النسخة المحلية.

<!DOCTYPE root-element SYSTEM "filename">

ويذكر المزيد من المعلومات هنا: http://www.w3schools.com/dtd/dtd_intro. آسيا والمحيط الهادئ

واعتقد انه يمكن أيضا تعيين نوعا من الملكية validateOnParse إلى "كاذبة" في محلل يدويا. يعتمد على ما المكتبة التي تستخدمها لتحليل XML.

ومزيد من المعلومات هنا: http://www.w3schools.com/dtd/dtd_validation.asp

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top