2016-07-27 14 views
0

私は以前にDOMパーサーを使用していましたが、プロジェクトの下にDTDファイルを置くと、DOMコードはDTDファイル自体を検出し、ルールに基づいてファイルを解析することができました。 SAXパーサに転送する間に、SAXパーサが設定せずにDTDファイル自体を検出できなかったようです。 resolveEntity()を使用すると書かれている投稿がありますが、私は理解できませんでした。私のJavaコードにローカルDTDファイルを簡単な方法で読み込むためにこの問題を解決するのに手伝ってもらえますか?SAXパーサーはDTDファイルをロードします

誰かがコード例を挙げることができれば、それは最高です。

答えて

0

解決策を投稿しています。私はSAXドキュメントから入力を受け取りました。私はW3 SchoolsのサンプルDTDとXMLを同じもの(http://www.w3schools.com/xml/xml_dtd.asp)に使用していますが、DOCTYPEは別のファイル上にあればDTDからその1行を削除しても必要ありません。あなたが望むサンプルであるかどうか分からない、何らかの形で役立つことを願っています!

public static void main(String[] args) { 
     try { 
      SAXParserFactory factory = SAXParserFactory.newInstance(); 
      factory.setNamespaceAware(true); 
      factory.setValidating(true); 

      XMLReader reader = factory.newSAXParser().getXMLReader(); 
      reader.parse(new InputSource(new FileInputStream("C:\\DevelopmentTools\\3.CODE\\SAX-XML.txt"))); 
      reader.setEntityResolver(new EntityResolver() { 

       @Override 
       public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { 
        // TODO Auto-generated method stub 
        if (systemId == null) { 
         systemId = "C:\\DevelopmentTools\\3.CODE\\99.WORKSPACE\\Note.dtd"; 
        } 
        InputSource result = null; 
        result = new InputSource(systemId); 
        return result; 
       } 
      }); 

     } catch (ParserConfigurationException e) { 
      e.printStackTrace(); 
     } catch (SAXException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 
関連する問題