带函数的 XPath 表达式

XPath Expression with functions

我正在尝试构建一个 XPath 表达式来获取至少 5 年前出版的所有 专辑 价格 . XML 文档具有以下结构:

<catalogue>
    <album>
        <year>1990</year>
        <price>7.99</price>
        ...
    </album>
</catalogue>

我试过以下方法,但显然有问题:

string xPathExpression = "album[year<year-from-date(current-date())-5]/price";

这也不行:

string xPathExpression = "album[year<year-from-date("2010-07-07")]/price";

这可能是一些与名称空间相关的问题或其他问题。我找到了以下示例,但我不确定如何在实践中实现它:

year-from-date(xs:date("2005-04-23"))

我正在使用 C#,更具体地说 XmlDocument(SelectNodes())

year-from-date()current-date() 是 XPath 2.0 函数。 .NET 的内置 XML 库,包括 XmlDocument,仅支持 XPath 1.0。

year-from-date()的情况下,你可以直接使用substring():

album[year < substring("2010-07-07", 1, 4)]/price

如果您需要 returns 当前日期的函数,您可以创建一个 custom function resolver。设置起来有点麻烦,但它允许您定义几乎可以执行任何操作的 XPath 函数。