Я пытаюсь экранировать html-символы строки и использую эту строку для построения XML DOM с использованием метода parseXml, показанного ниже.Далее я пытаюсь вставить этот документ DOM в базу данных.Но когда я это делаю, я получаю следующую ошибку:
org.xml.sax.SAXParseException: Ссылка в прологе недопустима.
У меня есть три вопроса: 1) Я неуверен, как избежать двойных кавычек.Я пробовал replaceAll ("\" "," "") и не уверен, правильно ли это.
2) Предположим, я хочу, чтобы строка начиналась и заканчивалась двойными кавычками (например, "sony"), какмне кодировать это?Я пробовал что-то вроде:
String sony = "\" sony \ ""
Это правильно?Будет ли приведенная выше строка содержать «sony» вместе с двойными кавычками, или есть ли другой способ сделать это?
3) Я не уверен, что «org.xml.sax.SAXParseException: ссылка не допускается в прологе«.ошибка означает.Может кто-нибудь помочь мне исправить это?
Спасибо, Sony
Шаги в моем коде:
Утилиты.java
открытая статическая строка escapeHtmlEntities (String s) {return s.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
protected void notifyNewEntryCreated (String entryType) выдает исключение {для (слушатель 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>libx.org@gmail.com</email></author>" +
"<libx:" + entryType + "></libx:" + entryType + ">" + "</entry>");
xmlModel.insertNewEntry(xml, getSelectedId());
}
XMLDataModel.java
public void insertNewEntry (String xml, String parent_id) вызывает исключение {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
объявить пространство имен libx = 'http://libx.org/xml/libx2'; объявить атом пространства имен =' http://www.w3.org/2005/atom'; объявить переменную $ entry в виде xs: anyAtomicType external;объявите переменную $ parent_id как xs: string external;объявите переменную $ feed как xs: anyAtomicType: = doc ('libx2_feed') / atom: feed;объявите переменную $ metadata как xs: anyAtomicType: = doc ('libx2_meta') / metadata;let $ curid: = $ metadata / curid возвращает замену значения узла $ curid данными ($ curid) + 1, let $ newid: = data ($ metadata / curid) + 1 возвращает узел вставки {$ newid} {$ entry / / } в $ feed, пусть $ newid: = data ($ metadata / curid) + 1 возвращает if ($ parent_id = 'root') then (), в противном случае вставьте узел http://libx.org/xml/libx2' /> в $ feed/ атом: запись [атом: ID = $ parent_id] // (libx: модуль | libx: libapp | libx: пакет)