को absolutized होने से EntityResolver # resolveEntity में 'systemid' (स्ट्रिंग publicId, स्ट्रिंग systemid) को रोकने के लिए मैं इसे कैसे में सभी संस्थाओं के समाधान के लिए निम्न XML दस्तावेज़ पार्स करने के लिए करना चाहते हैं:जावा: वर्तमान कार्यशील निर्देशिका
<!DOCTYPE doc SYSTEM 'mydoc.dtd'>
<doc>&title;</doc>
मेरे EntityResolver डेटाबेस से दी प्रणाली आईडी के साथ बाहरी संस्था लाने के लिए माना जाता है और उसके बाद संकल्प, समझ के लिए नीचे देख पा रहे हैं:
private static class MyEntityResolver
{
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException
{
// At this point, systemId is always absolutized to the current working directory,
// even though the XML document specified it as relative.
// E.g. "file:///H:/mydoc.dtd" instead of just "mydoc.dtd"
// Why??? How can I prevent this???
SgmlEntity entity = findEntityFromDatabase(systemId);
InputSource is = new InputSource(new ByteArrayInputStream(entity.getContents()));
is.setPublicId(publicId);
is.setSystemId(systemId);
return is;
}
}
मैं दोनों का उपयोग कर डोम (DocumentBuilder) और SAX (XMLReader) की कोशिश की , इकाई रिज़ॉल्वर को MyEnt पर सेट करें ItyResolver (यानी। setEntityResolver(new MyEntityResolver())
), लेकिन systemId
MyEntityResolver#resolveEntity(String publicId, String systemId)
में हमेशा मौजूदा कार्य निर्देशिका के लिए पूर्ण किया जा रहा है।
मैंने setFeature("http://xml.org/sax/features/resolve-dtd-uris", false);
पर कॉल करने का भी प्रयास किया, लेकिन इससे कुछ भी मदद नहीं मिली।
तो मैं जो चाहता था उसे प्राप्त कैसे कर सकता हूं?
धन्यवाद!