我正在尝试构建一个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())
。
答案 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函数。