快速业务通道

Java Content Repository API简介 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
CRWiki 拓扑,那么可以像这样通过遍历得到属性:

String roseTitle = rn.getProperty   ("wiki:encyclopedia/wiki:entry[1]/wiki:title").getString()

请注意,您是通过 wiki:entry[1] 进行遍历的。当有同名的多个同级节点时,可以用下标区分出想要的同级节点。在 JCR 中,对同级节点的索引是从 1 而不是 0 开始的。而且,索引的顺序是在通过 Node.getNodes() 得到的迭代器中返回的节点的顺序。

Java Content Repository API简介(8)

时间:2011-06-25 IBM Titus Barik

然后,可以通过获取 NodeIterator(它返回特点节点的子节点)来浏览所有 JCRWiki 条目,如清单 9 所示:

清单 9. 浏览内容仓库

Node encyclopedia = rn.getNode("wiki:encyclopedia"); NodeIterator entries = encyclopedia.getNodes("wiki:entry"); while (entries.hasNext()) {    Node entry = entries.nextNode();    System.out.println(entry.getName());    System.out.println(entry.getProperty("wiki:title")。getString());    System.out.println(entry.getProperty("wiki:content")。getString());    System.out.println(entry.getPath());    Property category = entry.getProperty("wiki:category");    try {     String c = category.getValue()。getString();     System.out.println("Category: " + c);    } catch (ValueFormatException e) {     Value[] categories = category.getValues();     for (Value c : categories) {      System.out.println("Category: " + c.getString());     }    } }

因为分类属性可以是多值的也可以是单值的,所以要用 try-catch 语句检查它。如果对多值属性调用 getValue(),就会抛出 ValueFormatException。一般来说,直接存取和遍历存取都需要知道内部节点的结构。所以让我们来看一种更具表现力的存取节点的方式:使用搜索。

用 XPath 搜索内容

正如已经看到的,遍历存取和直接存取都需要知道图书的位置。获得特定条目的更好方式是通过 JCR 的 XPath 搜索工具。因为从树形结构来看,工作区模型非常类似于 XML 文档,所以 XPath 是查找节点的理想语法。XPath 查询是通过 QueryManager 对象执行的。查询的过程与通过 JDBC 存取记录类似,如清单 10 所示:

清单 10. 用 XPath 搜索内容

QueryManager qm = ws.getQueryManager(); Query q = qm.createQuery ("//wiki:encyclopedia/wiki:entry[@wiki:title = ''rose'']",        Query.XPATH); QueryResult result = q.execute(); NodeIterator it = result.getNodes(); while (it.hasNext()) {    Node n = it.nextNode();    System.out.println(n.getName());    System.out.println(n.getProperty("wiki:title").getString());    System.out.println(n.getProperty("wiki:content").getString()); }

createQuery() 的第二个参数指定所使用的查询语言。JRC 实现可以另外选择为 SQL 语法支持 Query.SQL。也可以执行更复杂的查询。例如,可以查询的内容中包含单词 rose 的所有条目:

Query q = qm.createQuery    ("//wiki:encyclopedia/" +    "wiki:entry[jcr:contains(@wiki:content, ''rose'')]",    Query.XPATH);

Java Content Repository API简介(9)

时间:2011-06-25 IBM Titus Barik

用 XML 导入和导出内容

JSR-170 为了确保跨

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号