目前我正在尝试使用Java API从我的MarkLogic服务器获取数据(XML)。
因此我添加了名称空间:
NamespacesManager nsManager = client.newServerConfigManager()
.newNamespacesManager();
nsManager.addPrefix("document",
"http://test/dummy/master/doc");
...
之后我尝试了以下内容:
DatabaseClient client = DatabaseClientFactory.newClient("IP_ADDRESS",
PORT, user, password, Authentication.DIGEST);
SearchHandle handle = new SearchHandle();
QueryManager queryMgr = client.newQueryManager();
KeyValueQueryDefinition query = queryMgr.newKeyValueDefinition();
query.put(
queryMgr.newElementLocator(new QName("doc:id")),
"1439-1074");
SearchHandle resultsHandle = queryMgr.search(query, handle);
System.out.println("results: " + resultsHandle.getTotalResults());
// System.out.println("Matched "+resultsHandle.getTotalResults()+
// " documents with '"+query.getCriteria()+"'\n");
// iterate over the result documents
MatchDocumentSummary[] docSummaries = resultsHandle.getMatchResults();
System.out.println("Listing "+docSummaries.length+" documents:\n");
所有作品;我得到了结果,但它们不包含XML文档(只是文档的URI)。是否可以通过此查询获取XML结果,或者我是否必须提交第二个查询,如:
JSONDocumentManager docMgr = client.newJSONDocumentManager();
StringHandle doc = docMgr.read(uri, new StringHandle());
答案 0 :(得分:1)
您必须使用与您想要的结果相匹配的结果句柄。请查看http://developer.marklogic.com/learn/java/processing-search-results和http://docs.marklogic.com/javadoc/client/index.html?com/marklogic/client/io/SearchHandle.html
不使用SearchHandle
,而是使用StringHandle
。这是文档示例:
// create a handle for the search results to be received as raw XML
StringHandle resultsHandle = new StringHandle();
// run the search
queryMgr.search(query, resultsHandle);
// dump the XML results to the console
System.out.println(resultsHandle);
答案 1 :(得分:1)
要取回整个文档而不是代码段,请指定 raw transform会导致您的查询选项:
<transform-results apply="raw" />
请参阅:
http://docs.marklogic.com/guide/search-dev/search-api#id_58295
如果文档是XML,您可能希望使用内置的XML解析句柄,例如 DOMHandle,SAXHandle或XMLStreamReaderHandle(或者显示的技术) JDOMHandle或XOMHandle示例)而不是SearchHandle和extract 来自响应有效载荷的文件。
如果文档是JSON,您可能希望使用显示的技术 JacksonHandle的例子。