Je suis en train d'échapper à des caractères HTML d'une chaîne et cette chaîne pour construire un DOM XML en utilisant la méthode parseXML ci-dessous. Ensuite, j'essaie d'insérer ce document DOM dans la base de données. Mais, quand je fais ce que je reçois l'erreur suivante:org.xml.sax.SAXParseException: Référence est interdite dans Prolog
org.xml.sax.SAXParseException: Référence est interdite dans Prolog.
J'ai trois questions: 1) Je ne sais pas comment échapper des guillemets doubles. J'ai essayé replaceAll ("\" "," " ") et je ne sais pas si c'est juste
2) Supposons que je veux une chaîne commençant et se terminant par des guillemets doubles (par exemple:" sony "), comment puis-je ? Code, j'essayé quelque chose comme:
chaîne sony = « \ » sony \ « »?
est-ce droit la chaîne ci-dessus contiennent « sony » avec des guillemets doubles ou est-il une autre façon de le faire ?
3) Je ne suis pas sûr de ce que l'erreur "org.xml.sax.SAXParseException: Reference is not allowed in prolog." Signifie que quelqu'un peut m'aider à résoudre ce problème?
Merci, Sony
étapes dans mon code:
Utils. java
escapeHtmlEntities à cordes statiques publics (String) { retour s.replaceAll ("&", "& ") .ReplaceAll (" <", "< ") .ReplaceAll (">", ">") . .ReplaceAll ("\" " "" ") replaceAll (":", ": ") .ReplaceAll (" /"," / «);}
public static Document parseXml (String xml) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new InputSource(new StringReader(xml))); doc.setXmlStandalone(false); return doc; }
TreeController.java
notifyNewEntryCreated protégé vide (String EntryType) renvoie Exception { pour (Listener l: treeControlListeners) l.newEntryCreated();
final DomNodeTreeModel domModel = (DomNodeTreeModel) getModel(); Element parent_item = getSelectedEntry(); String xml = Utils.escapeHtmlEntities("<entry xmlns=" + "\"http://www.w3.org/2005/atom\"" + "xmlns:libx=" + "\"http://libx.org/xml/libx2\">" + "<title>" + "New" + entryType + "</title>" + "<updated>2010-71-22T11:08:43z</updated>" + "<author> <name>LibX Team</name>" + "<uri>http://libx.org</uri>" + "<email>[email protected]</email></author>" + "<libx:" + entryType + "></libx:" + entryType + ">" + "</entry>"); xmlModel.insertNewEntry(xml, getSelectedId());
}
XMLDataModel.java
insertNewEntry public void (String xml, String id_parent) throws Exception { insertNewEntry (Utils.parseXml (xml) .getDocumentElement(), parent_id); }
public void insertNewEntry (Element elem, String parent_id) throws Exception {
// inserting an entry with no libx: tag will create a storage leak
if (elem.getElementsByTagName("libx:package").getLength() +
elem.getElementsByTagName("libx:libapp").getLength() +
elem.getElementsByTagName("libx:module").getLength() < 1) {
// TODO: throw exception here instead of return
return;
}
XQPreparedExpression xqp = Q.get("insert_new_entry.xq");
xqp.bindNode(new QName("entry"), elem.getOwnerDocument(), null);
xqp.bindString(new QName("parent_id"), parent_id, null);
xqp.executeQuery();
xqp.close();
updateRoots();
}
- insert_new_entry.XQ
espace de noms libx = déclarer 'http://libx.org/xml/libx2'; declare namespace atom = 'http://www.w3.org/2005/atom'; déclare la variable $ entry en tant que xs: anyAtomicType external; déclare la variable $ parent_id en tant que xs: string external; déclare la variable $ feed en tant que xs: anyAtomicType: = doc ('libx2_feed')/atom: feed; déclare la variable $ metadata en tant que xs: anyAtomicType: = doc ('libx2_meta')/metadata; laisser curid $: = métadonnées $/curid retour remplacer la valeur de nœud curid de $ avec des données (curid $) + 1, laisser newid $: = données (métadonnées $/curid) + 1 insert retour noeud {$ newid} { entrée $// } dans l'alimentation $, nous newid $: = données (métadonnées $/curid) + 1 retour si ($ parent_id = 'root') puis() autre insérer le noeud http://libx.org/xml/libx2 '/> dans $ feed/atom: entrée [atom: id = $ parent_id] // (libx: module | libx: libapp | libx: package)
Salut, J'ai appris que l'erreur: "org.xml.sax.SAXParseException: référence n'est pas autorisée dans prolog." est levée lorsque XML en cours de chargement n'a pas de code XML valide. Ainsi, tout le problème se résume à la conversion de la chaîne en XML valide. Donc je suppose que la question se résume à la conversion de la chaîne « xml » utilisé dans l'exemple ci-dessus dans un xml valide. Je devine que quelque chose ne va pas dans la façon dont je m'échappe et j'utilise des caractères guillemets html. Je suis toujours confus avec les questions 1 et 2 dans le post ci-dessus. Merci pour l'aide. -Sony – sony