gpt4 book ai didi

java - 使用 xquery 从我的 xml 文档中检索时出错

转载 作者:行者123 更新时间:2023-11-29 05:45:58 25 4
gpt4 key购买 nike

我正在尝试从我的 XML 文档中检索作者,但一些作者的名字中有撇号,因此结果会引发错误。

输入:

<dblp>
<book mdate="2002-01-03" key="books/aw/CeriF97">
<author>Stefano Ceri</author>
<author>Piero Fraternali</author>
<title>Designing Database Applications with Objects and Rules: The IDEA Methodology</title>
<publisher href="db/publishers/aw.html">Addison-Wesley</publisher>
<year>1997</year>
<isbn>0-201-40369-2</isbn>
</book>
</dblp>

Java/XQuery 代码:

public ArrayList<String> getArrayListOfAuthors(){

String query = "for $x in fn:distinct-values(doc(\"" +xml_file_name+ "\")//author) " +
"order by $x "+
"return $x";

System.out.println("XQuery query:"+query);
ArrayList<String> myList = new ArrayList<String>();
try{
XQDataSource ds = new SaxonXQDataSource();
XQConnection conn = ds.getConnection();
XQExpression exp = conn.createExpression();

XQSequence seq = exp.executeQuery(query);
int i = 1;

while (seq.next()) {
i++;
//System.out.println(seq.getAtomicValue());
myList.add(seq.getAtomicValue());
}
//System.out.println("\n== Total number of authors is "+i+" ==");

seq.close();

} catch (XQException err) {
System.out.println("Failed as expected: " + err.getMessage());
}
return myList;
}

错误信息:

XPST0003 XQuery syntax error near #...e $y/author = 'Kieran O'Neill'#:
Unmatched quote in expression
Error on line 1 column 109

最佳答案

错误消息强烈表明您正在通过字符串连接构建查询,可能是通过处理从您向我们展示的查询中获得的作者列表。 (查找包含 $y 的查询,它不是您示例中的那个)。

然后更改它,而不是像这样使用连接构造查询:

query = "//author[@name="' + name + "']"

您构造查询以包含一个参数:

query = "declare variable $name external;//author[@name=$name]"

并执行此命令,提供 $name 的值作为运行时参数。除了避免名称中包含撇号的问题之外,还有几个好处:您可以避免注入(inject)攻击的安全问题,并且您可以获得性能优势,因为您可以编译一次查询并重复使用它。

关于java - 使用 xquery 从我的 xml 文档中检索时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15850974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com