Xquery没有返回所需的值

时间:2014-09-04 05:36:24

标签: xpath xquery

我正在尝试返回一组特定的值但是查询并没有完全返回我想要的内容。我想将作者“Hennie J. Steenhagen”的记录归还年份。然而,它返回的是按年份分组的记录,如果它与Hennies记录的年份相同。不仅是亨尼斯。

例如,如果我们有记录<www><author>Hennie*</author><year>1990</year></www><www><author>Derpie</author><year>1990></year></www>,则查询将返回1990年分组的两个记录,我只希望返回Hennies。

for $y in /*/*/year where $y/../author ="Hennie J. Steenhagen" return <year-Pub>{$y}{/*/*[year = $y]}</year-Pub>

2 个答案:

答案 0 :(得分:2)

您的问题很难理解,因为您的XPath处理的XML节点树比您提供的示例XML更大。但是,对于该示例,我将假设您的记录名为record。你的XPath输出对我来说也没什么意义,但我会假设你知道你想要什么!

鉴于XML:

<record>
    <www>
        <author>Hennie J. Steenhagen</author>
        <year>1990</year>
    </www> 
    and 
    <www>
        <author>Derpie</author>
        <year>1990></year>
    </www>
</record>

如果您有XQuery 3.0处理器,则可以使用以下命令:

/record/www[author = "Hennie J. Steenhagen"] ! <year-Pub>{year}{.}</year-Pub>

如果您只能访问XQuery 1.0处理器,那么您可以回退到以下内容:

for $w in /record/www[author = "Hennie J. Steenhagen"]
return
    <year-Pub>{$w/year}{$w}</year-Pub>

我的两个例子都只使用一个谓词,它只会过滤一次数据。而您自己找到的解决方案同时使用谓词和where表达式,因此必须对数据进行两次过滤。

答案 1 :(得分:0)

修正了它,

for $y in /*/*/year where $y/../author ="Hennie J. Steenhagen" and /*/*[year=$y] return <year-Pub>{$y/../*}</year-Pub>

感谢任何花时间寻找的人。