我使用XQuery处理器撒克逊人,现在我们写的Xquery在“.xqy”文件,其中我们指上,我们将执行Xquery.please看到例如XML文件如下─如何动态地指一个XML文件XQuery中撒克逊
for $x in doc("books.xml")/books/book
where $x/price>30
return $x/title
现在我想使用没有存储在一些path.Say比如我想引用下面的XML作为字符串动态生成的XML,该怎么做?
String book= <books> <book category="JAVA"> <title lang="en">Learn Java in 24 Hours</title> <author>Robert</author> <year>2005</year> <price>30.00</price> </book> <book category="DOTNET"> <title lang="en">Learn .Net in 24 hours</title> <author>Peter</author> <year>2011</year> <price>40.50</price> </book> <book category="XML"> <title lang="en">Learn XQuery in 24 hours</title> <author>Robert</author> <author>Peter</author> <year>2013</year> <price>50.00</price> </book> <book category="XML"> <title lang="en">Learn XPath in 24 hours</title> <author>Jay Ban</author> <year>2010</year> <price>16.50</price> </book> </books>
的Java代码 -
`
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import javax.xml.xquery.XQConnection;
import javax.xml.xquery.XQDataSource;
import javax.xml.xquery.XQException;
import javax.xml.xquery.XQPreparedExpression;
import javax.xml.xquery.XQResultSequence;
import com.saxonica.xqj.SaxonXQDataSource;
public class XQueryTester {
public static void main(String[] args){
try {
execute();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (XQException e) {
e.printStackTrace();
}
}
private static void execute() throws FileNotFoundException, XQException{
InputStream inputStream = new FileInputStream(new File("books.xqy"));
XQDataSource ds = new SaxonXQDataSource();
XQConnection conn = ds.getConnection();
XQPreparedExpression exp = conn.prepareExpression(inputStream);
XQResultSequence result = exp.executeQuery();
while (result.next()) {
System.out.println(result.getItemAsString(null));
}
}
}
`
你可以将字符串作为参数,并解析它的XQuery代码里面'解析的XML($ PARAM)'或者你可以解析Java中的XML并将其作为参数传递给您的XQuery代码。你可以使用撒克逊向我们展示你的Java代码吗?您使用撒克逊的哪些API? –
@MartinHonnen感谢评论。我已经添加了java代码,请参阅上文。 –