查询 XML 数据库外的 XML 文档
2010-10-22 17:19:23 来源:WEB开发网查询结果(至少在本文撰写之时)是两个版本的文字,直接显示在彼此之后。如果您知道这个特定 POM 文件的内容,那么这个结果就是符合逻辑的。两个依赖项声明引用 Log4J:一个用于代码,一个用于插件。
在单独的元素中写入这些版本有助于轻松区分它们。对于本示例,您可以使用一个简单的 for 构造(参见 清单 4)。
清单 4. 在单独的元素中创建版本
declare namespace m = "http://maven.apache.org/POM/4.0.0";
let $doc := doc("http://krank.googlecode.com/svn/trunk/pom.xml")
let $versions := $doc//m:dependency[m:artifactId eq 'log4j']/m:version/text()
return <results>
{
for $version in $versions
return <version>{$version}</version>
}
</results>
这个查询的结果是:
<results>
<version>1.2.13</version>
<version>1.2.13</version>
</results>
严格来说,这个结果没有回答这个问题:它只是重复相同的版本号。问题是:您的项目使用的是哪个 Log4J 版本?在第一个 <version> 元素之后,已经清楚地指出使用的版本是 version 1.2.13。第二个 <version> 元素只在版本不同时相关。
您可以使用 distinct-values() 函数轻松修复这个差别,如 清单 5 所示。
清单 5. 移除 version 元素的副本
declare namespace m = "http://maven.apache.org/POM/4.0.0";
let $doc := doc("http://krank.googlecode.com/svn/trunk/pom.xml")
let $versions := distinct-values($doc//m:dependency[m:artifactId eq 'log4j']/m:version)
return <results>
{
for $version in $versions
return <version>{$version}</version>
}
</results>
赞助商链接