带函数的 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 函数。
我正在尝试构建一个 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 函数。