如何通过MarkLogic Java API实现匹配特定URI模式的XML文件查询?
使用MarkLogic Java API匹配特定URI模式的XML文件
要实现等效于cts:document-query(cts:uri-match("/directory/*/folder/*.xml"))的功能,可通过MarkLogic Java API的结构化查询能力完成,核心是利用UriMatchQuery匹配通配符URI,再包装为文档查询获取目标文件。
核心代码实现
import com.marklogic.client.DatabaseClient; import com.marklogic.client.DatabaseClientFactory; import com.marklogic.client.document.XMLDocumentManager; import com.marklogic.client.query.QueryManager; import com.marklogic.client.query.StructuredQueryBuilder; import com.marklogic.client.query.StructuredQueryDefinition; import com.marklogic.client.query.SearchHandle; public class UriMatchXmlFinder { public static void main(String[] args) { // 初始化数据库客户端(根据实际环境调整地址、端口、认证信息) DatabaseClient client = DatabaseClientFactory.newClient( "localhost", 8000, DatabaseClientFactory.DigestAuthContext.newAuthContext("your-username", "your-password") ); try { // 创建XML文档管理器和查询管理器实例 XMLDocumentManager xmlDocMgr = client.newXMLDocumentManager(); QueryManager queryMgr = client.newQueryManager(); StructuredQueryBuilder queryBuilder = new StructuredQueryBuilder(); // 构建URI匹配规则,对应XQuery中的cts:uri-match UriMatchQuery uriMatchQuery = queryBuilder.uriMatch("/directory/*/folder/*.xml"); // 包装为文档查询,对应XQuery中的cts:document-query StructuredQueryDefinition docQuery = queryBuilder.document(uriMatchQuery); // 执行查询并获取结果 SearchHandle resultsHandle = queryMgr.search(docQuery, new SearchHandle()); String[] matchingUris = resultsHandle.getMatchResults(); // 遍历输出匹配的文档URI,如需获取内容可调用xmlDocMgr.read(uri) for (String uri : matchingUris) { System.out.println("匹配的XML文档URI:" + uri); } } finally { // 务必关闭客户端连接释放资源 client.release(); } } }
关键代码说明
queryBuilder.uriMatch("/directory/*/folder/*.xml"):实现与cts:uri-match完全等效的通配符匹配,*可匹配任意长度的字符序列。queryBuilder.document(uriMatchQuery):将URI匹配查询包装为文档查询,确保仅返回数据库中实际存在的文档,对应cts:document-query的作用。SearchHandle:用于接收查询结果,通过getMatchResults()可直接提取所有匹配的文档URI列表;若需读取文档内容,可使用XMLDocumentManager的read()方法。
内容的提问来源于stack exchange,提问作者Aspir
相关产品推荐
相关产品推荐

