Java org.xml.sax.SAXParseException:prolog中不允许引用
我试图转义字符串的html字符,并使用此字符串使用如下所示的parseXml方法构建DOM XML。接下来,我尝试将这个DOM文档插入数据库。但是,当我这样做时,我会得到以下错误: org.xml.sax.SAXParseException:prolog中不允许引用 我有三个问题: 1) 我不知道如何避开双引号。我尝试了replaceAll(“\”,“”),但不确定这是否正确 2) 假设我想要一个以双引号开头和结尾的字符串(例如:“sony”),我该如何编码它?我试过这样的方法: 字符串sony=“\”sony“” 是这样吗?上面的字符串将包含“sony”和双引号,还是有其他方法 3) 我不确定“org.xml.sax.SAXParseException:prolog中不允许引用”的意思。有人能帮我修一下吗 谢谢, 索尼 我的代码中的步骤:Java org.xml.sax.SAXParseException:prolog中不允许引用,java,html,dom,xquery,xml-parsing,Java,Html,Dom,Xquery,Xml Parsing,我试图转义字符串的html字符,并使用此字符串使用如下所示的parseXml方法构建DOM XML。接下来,我尝试将这个DOM文档插入数据库。但是,当我这样做时,我会得到以下错误: org.xml.sax.SAXParseException:prolog中不允许引用 我有三个问题: 1) 我不知道如何避开双引号。我尝试了replaceAll(“\”,“”),但不确定这是否正确 2) 假设我想要一个以双引号开头和结尾的字符串(例如:“sony”),我该如何编码它?我试过这样的方法: 字符串sony
final DomNodeTreeModel domModel=(DomNodeTreeModel)getModel();
元素父项\项=getSelectedEntry();
String xml=Utils.escapeHtmlEntities(“+”+“New”+entryType+”)+
“2010-71-22T11:08:43z”+”;
声明名称空间原子=“”;
将变量$entry声明为xs:anyAtomicType external;
将变量$parent_id声明为xs:string external;
将变量$feed声明为xs:anyAtomicType:=doc('libx2_feed')/atom:feed;
将变量$metadata声明为xs:anyAtomicType:=doc('libx2_meta')/metadata;
让$curid:=$metadata/curid
返回用数据($curid)+1替换节点$curid的值,
设$newid:=data($metadata/curid)+1
返回插入节点
{$newid}{
$entry//
}
变成$feed,
设$newid:=data($metadata/curid)+1
如果($parent_id='root'),则返回()
其他的
插入节点http://libx.org/xml/libx2“/>进入
$feed/atom:entry[atom:id=$parent_id]/(libx:module | libx:libapp | libx:package)要转义双引号,请使用XML中预定义的“
实体
因此,您的示例字符串(比如属性值)如下所示
<person name=""sony""/>
(编辑:好的,我看到这只是格式化-当SO显示实体时,它们被转换为实际值。)
SAX异常是解析器由于XML无效而抱怨
除了转义文本外,您还需要确保它符合XML的标准。有很多地方需要正确处理,因此使用第三方库来编写XML通常更简单。例如,中的XMLWriter。您可以查看Tidy规范。这是w3c发布的规范。几乎所有最近的语言都有自己的实现n
而不仅仅是替换或只关心<,>,&只需配置JTidy(用于java)选项和解析
我使用了python、java和基于marklogic的tidy实现。所有这些都解决了我的问题Hi,我了解到错误:“org.xml.sax.SAXParseException:prolog中不允许引用。”当加载的XML没有有效的XML时抛出。因此,整个问题归结为将字符串转换为有效的XML。因此,我认为整个问题归结为转换字符串“XML”在上面的例子中使用了有效的xml。我猜我转义和使用html双引号字符的方式有问题。我仍然对上面文章中的问题1和2感到困惑。谢谢你的帮助。-索尼
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());
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();
}
<person name=""sony""/>
& --> &
> --> >
< --> <
" --> "
' --> '