带有函数的XPath表达式

时间:2015-03-10 21:47:23

标签: c# xml xpath xmldocument

我正在尝试构建一个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())

1 个答案:

答案 0 :(得分:2)

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

如果您需要一个返回当前日期的函数,可以创建一个custom function resolver。这是一个设置麻烦,但它将允许您定义几乎可以做任何事情的XPath函数。