Question

je reçois l'erreur suivante lorsque je tente de lancer mon programme java (il est censé lire un fichier xml et imprimer une partie du contenu).

D'après ce que je crois comprendre qu'il ya une entité qui est non référencé ne fait pas partie de la norme xml donc ma question est; comment puis-je résoudre ce problème?

Merci,

[Fatal Error] subject.xml:4:233: The entity "rsquo" was referenced, but not declared.
org.xml.sax.SAXParseException: The entity "rsquo" was referenced, but not declared.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at DomParserExample2.parseXmlFile(DomParserExample2.java:42)
at DomParserExample2.runExample(DomParserExample2.java:24)
at DomParserExample2.main(DomParserExample2.java:115)
Exception in thread "main" java.lang.NullPointerException
at DomParserExample2.parseDocument(DomParserExample2.java:54)
at DomParserExample2.runExample(DomParserExample2.java:27)
at DomParserExample2.main(DomParserExample2.java:115)
Était-ce utile?

La solution

Le ’ d'entité est une entité XML. Son défini dans HTML: http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

Si vous avez créé le XML, vous pouvez ajouter Entitys vous DTD.

Quelque chose comme celui-ci pourrait aider: http://gv.ca/dtd/character-entities .dtd

modifier: Pour résoudre ce problème, vous pouvez ajouter une DTD à votre fichier XML (si non défini).

Votre XML:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE demo SYSTEM "./demo.dtd">
<demo>
    &rsquo;
</demo>

Votre DTD:

<!ELEMENT demo (#PCDATA)>
<!ENTITY rsquo   "&#8217;">

Si vous fournissez la DTD à votre application, l'erreur disparaît. Je n'écrirais pas alle me Entités mises, j'utiliser un du W3C http: //www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent

Comment inclure la DTD pour votre XML est une autre question. Pour autant que je me rappelle que vous pouvez définir le chemin de la DTD ou un catalogue de fichiers.

modifier

2: Jetez un oeil à la EntityResolver: http://download.oracle.com /javase/1.4.2/docs/api/org/xml/sax/EntityResolver.html

Autres conseils

Suite à la réponse de Christian, vous avez également la possibilité de déclarer vos entités directement dans le XML

<!DOCTYPE your_type [
   <!ENTITY rsquo "&#8217;">
   <!ENTITY lsquo "&#8216;">
]>
/**
         * This Inner class is written to solve the XML parsing DTD validation
         * checking from online because if Internet is not connected, then it
         * throws Exception.
         * 
         * @author Ravi Thapa
         */




public class CustomEntityResolver implements EntityResolver
    {
        public InputSource resolveEntity(String publicId, String systemId)
        {
            InputSource source = null;
            Pattern pattern1 =
                    Pattern.compile("^-//(.*)//DTD(.*)$", Pattern.CASE_INSENSITIVE);
            Matcher match1 = pattern1.matcher(publicId.trim());

            Pattern pattern2 =
                    Pattern.compile("^http://(.*).dtd$", Pattern.CASE_INSENSITIVE);
            Matcher match2 = pattern2.matcher(systemId.trim());
            if (match1.find() || match2.find())
            {
                source = new InputSource(new ByteArrayInputStream("".getBytes()));
            }

            // return null to signal default behavior
            return source;
        }
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top