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 为了确保跨 |