web-dev-qa-db-ja.com

xpathの日付の比較

yyyy-MM-ddの形式の日付である属性に基づいて要素をフィルタリングしようとしています。

私のXMLは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<root>
  <article title="wired" pub-date="2010-11-22" />
  <article title="Plus 24" pub-date="2010-11-22" />
  <article title="Finance" pub-date="2010-10-25" />
</root>

私のxpathの試み:

'//article[xs:date(./@pub-date) > xs:date("2010-11-15")]'

Xpath 2.0を使用すると、どうしても必要な場合を除いて、スキーマの追加を回避できます。

コメントから

その時は何かが足りないと思います。 xs:dateが機能するために何か他のものを指定する必要がある可能性はありますか?たぶんxs:名前空間の定義?

19
Razor

XPath 1.0と2.0の両方で使用できます

//article[number(translate(@pub-date,'-','')) > 20101115]

XPath 2.0式は正しく、Saxon 9.0.3この変換を使用しています

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xsl:template match="/">
      <xsl:sequence select="//article[xs:date(./@pub-date) > xs:date('2010-11-15')]"/>
    </xsl:template>
</xsl:stylesheet>

提供されたXMLドキュメントに適用された場合

<root>
  <article title="wired" pub-date="2010-11-22" />
  <article title="Plus 24" pub-date="2010-11-22" />
  <article title="Finance" pub-date="2010-10-25" />
</root>

必要な正しい結果を生成します

<article title="wired" pub-date="2010-11-22"/>
<article title="Plus 24" pub-date="2010-11-22"/>
30
<cfset startdatetime = Now() >
<cfset nNow = LSParseNumber(DateFormat(DateAdd('n', -15,startdatetime),'yyyyMMddHHmm')) >

number(substring(concat(translate(text(),'-: ',''),'0000000000000000'),1,12))<=#nNow#
2
barry austra