我試圖轉義字符串的html字符,並使用此字符串使用下面顯示的parseXml方法構建DOM XML。接下來,我試圖將這個DOM文檔插入到數據庫中。但是,當我這樣做時,我收到以下錯誤:org.xml.sax.SAXParseException:在序言中不允許引用
org.xml.sax.SAXParseException:在prolog中不允許使用引用。
我有三個問題: 1)我不知道如何逃避雙引號。我試過replaceAll(「\」「,」"「),我不確定這是否正確。
2)假設我想要一個以雙引號開頭和結尾的字符串(例如:」sony「),我如何?代碼它,我想是這樣:
字符串索尼=「\」 SONY \「」?
這是正確的將上面的字符串包含「SONY」與雙引號一起,還是有這樣做的另一種方式?
3)我不確定什麼「org.xml.sax.SAXParseException:引用在prolog中是不允許的」,錯誤的意思是,有人可以幫我解決這個問題嗎?
感謝, 索尼
步驟在我的代碼:
utils的。的java
公共靜態字符串escapeHtmlEntities(一個String){ 返回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
protected void notifyNewEntryCreated(String entryType)爲(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(XML字符串,字符串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'; declare namespace atom ='http://www.w3.org/2005/atom'; 將變量$條目聲明爲xs:anyAtomicType external; 將變量$ parent_id聲明爲xs:string external; 將變量$ feed聲明爲xs:anyAtomicType:= doc('libx2_feed')/ atom:feed; 將變量$ metadata聲明爲xs:anyAtomicType:= doc('libx2_meta')/ metadata; 讓$ curid:=數據($元數據/ curid)+ 1 返回插入節點 {$:= $元數據/ curid 返回數據($ curid)+ 1, 讓$ newid的替換節點$ curid的值NEWID} { $條目/ / } 到$飼料, 讓$ NEWID:=數據($元數據/ curid)+ 1 返回如果($ PARENT_ID = '根'),則() 別的 將節點http://libx.org/xml/libx2'/>插入到 $ feed/atom:entry [atom:id = $ parent_id] //(libx:module | libx:libapp | libx:package)
嗨, 我知道錯誤:「org.xml.sax.SAXParseException:引用不允許在序言。」當被加載的XML沒有有效的XML時拋出。 因此,整個問題歸結爲將字符串轉換爲有效的xml。 所以我想整個問題歸結爲將上述示例中使用的字符串「xml」轉換爲有效的xml。 我猜測我的轉義和使用html雙引號字符的方式是錯誤的。我仍然對上述帖子中的問題1和2感到困惑。 感謝您的幫助。 -Sony – sony 2010-07-22 18:45:04