XQuery函数用于动态地使用XPath从XML获取值

时间:2018-02-05 21:08:00

标签: xml xpath xquery

如何在XQuery中编写一个函数,以使用XPath获取名称为 <Bookstore> <Book> <Name>A</Name> <Price>15</Price> </Book> <Book> <Name>B</Name> <Price>10</Price> </Book> </Bookstore> 的XML下面的Book的价格?

Bookstore/Book[Name/text()='A']/Price/text()

要检索的XPath将使用名称值对,如下所示

{{1}}

请帮忙

3 个答案:

答案 0 :(得分:0)

应该如此简单:

/bookstore/book/price/text()

你试过这个吗?

答案 1 :(得分:0)

以下是如何使用XML结构编写XQuery函数以按名称获取图书价格的示例:

xquery version "3.1";

declare function local:get-book-price($book-name as xs:string) as xs:string {
    let $bookstore := 
        <Bookstore>
            <Book>
                <Name>A</Name>
                <Price>15</Price>
            </Book>
            <Book>
                <Name>B</Name>
                <Price>10</Price>
            </Book>
        </Bookstore>
    return
        $bookstore/Book[Name eq $book-name]/Price/string()
};

local:get-book-price("A")

这将返回15

答案 2 :(得分:0)

如果我正确地解释了你(我仍然有困难)你正在寻找一个eval()函数,它以字符串的形式获取XPath表达式,并对其进行求值,返回XPath的结果表达

你的用例确实无法解释为什么你需要这个,尽管有很多问题可以解决。

标准XQuery函数库中没有eval()函数。有些实现有一个,例如Saxon有saxon:evaluate()。 XSLT 3.0规范有一个标准指令xsl:evaluate - 它是一个指令而不是一个函数,因为需要为评估建立上下文。