1

目前我正在尝试使用 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());
4

2 回答 2

1

要取回整个文档而不是片段,请在查询选项中指定原始转换结果:

<transform-results apply="raw" />

请参见:

http://docs.marklogic.com/guide/search-dev/search-api#id_58295

如果文档是 XML,您可能希望使用内置的 XML 解析句柄,例如 DOMHandle、SAXHandle 或 XMLStreamReaderHandle(或 JDOMHandle 或 XOMHandle 示例所示的技术)而不是 SearchHandle,并从响应负载中提取文档。

如果文档是 JSON,您可能希望使用 JacksonHandle 示例中显示的技术。

于 2013-07-04T18:28:15.410 回答
1

您必须使用与您想要的结果相匹配的结果句柄。看看http://developer.marklogic.com/learn/java/processing-search-resultshttp://docs.marklogic.com/javadoc/client/index.html?com/marklogic/client/io/搜索句柄.html

不要使用 a SearchHandle,而是使用 a 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);
于 2013-07-04T15:32:27.010 回答