Vac*_*dik 8 java xquery exist-db
我将我的实体存储在eXist XML数据库中,并使用文件名(资源ID)作为实体的ID.
例:
String xquery = "for $movie in collection('/db/movie')//movie "
+ "return $movie";
Run Code Online (Sandbox Code Playgroud)
执行此查询后,我检索org.xmldb.api.base.Resource其内容用于创建实体的实例.当我想设置这个实体的id时,我这样做:
dvd.setId(rs.getId());
Run Code Online (Sandbox Code Playgroud)
问题是,如果我执行这样的查询:
String xquery = "for $dvd in collection('/db/dvd')//dvd "
+ "return <dvd>"
+ "{$dvd/title}"
+ "{$dvd/type}"
+ "{"
+ "<content>"
+ " {"
+ " for $movie in $dvd/content//movie"
+ " let $movieIn := doc(concat(\"/db/movie/\", $movie/@id))/movie"
+ " return "
+ " <movie id=\"{$movie/@id}\">"
+ " {$movieIn/name}"
+ " {$movieIn/director}"
+ " {$movieIn/year}"
+ " {$movieIn/country}"
+ " {$movieIn/actors}"
+ " {$movieIn/genres}"
+ " </movie>"
+ " }"
+ "</content>"
+ "}"
+ "</dvd>";
Run Code Online (Sandbox Code Playgroud)
rs.getId()回报null.我也尝试过的方法getDocumentId()从这个类,但它返回null为好.有没有办法让它返回资源的id(这是存储实体的文件的名称)?
如果不可能,是否有一种方法(功能或某事)获取我正在使用的文件的文件名(我的意思是,数据库从中检索数据)与XQuery查询?
我试过更换这一行:
+ "return <dvd>"
Run Code Online (Sandbox Code Playgroud)
有了这个:
+ "return <dvd id=\"{$dvd}\">"
Run Code Online (Sandbox Code Playgroud)
(这样我就可以从属性中获取文件的名称)但它不会返回文件名.
由于您使用的是eXist-db,因此可以使用util:document-name()函数:
util:document-name($dvd)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6059 次 |
| 最近记录: |