如果您尝试检查月份youth/dateofbirth
(请参阅我上面的评论),您可以使用:
month-from-date()
如果dateofbirth
是xs:date
或
month-from-dateTime()
如果dateofbirth
是xs:dateTime
xs:date 2012-06-14
示例: xs:dateTime 示例: 2012-06-14T22:34:52.682-06:00
如果dateofbirth
可转换为 xs:date 或 xs:dateTime,则必须手动提取月份(很可能使用tokenize()
)。
这是一个使用month-from-date()
. 我必须添加元素声明,guests
并且必须正确关闭内部子集(]>
而不是>]
)。
XML 输入
<!DOCTYPE guests [
<!ELEMENT guests (Guest+)>
<!ELEMENT Guest (Gname, youth+, car+)>
<!ELEMENT youth (Yname, dateofbirth)>
<!ELEMENT car (carType, excursion+)>
<!ELEMENT excursion (week, location)>
<!ELEMENT Gname (#PCDATA)>
<!ELEMENT Yname (#PCDATA)>
<!ELEMENT dateofbirth (#PCDATA)>
<!ELEMENT carType (#PCDATA)>
<!ELEMENT week (#PCDATA)>
<!ELEMENT location (#PCDATA)>
]>
<guests>
<Guest>
<Gname>Guest 1</Gname>
<youth>
<Yname>Youth A</Yname>
<dateofbirth>2012-06-14</dateofbirth>
</youth>
<car>
<carType/>
<excursion>
<week/>
<location/>
</excursion>
</car>
</Guest>
<Guest>
<Gname>Guest 2</Gname>
<youth>
<Yname>Youth B</Yname>
<dateofbirth>2012-08-14</dateofbirth>
</youth>
<car>
<carType/>
<excursion>
<week/>
<location/>
</excursion>
</car>
</Guest>
<Guest>
<Gname>Guest 3</Gname>
<youth>
<Yname>Youth C</Yname>
<dateofbirth>2000-12-25</dateofbirth>
</youth>
<car>
<carType/>
<excursion>
<week/>
<location/>
</excursion>
</car>
</Guest>
</guests>
XQuery
<guests>
{
for $guest in /guests/Guest[month-from-date(youth/dateofbirth) = 8]
return $guest/Gname
}
</guests>
XML 输出
<guests>
<Gname>Guest 2</Gname>
</guests>
实际上,XQuery 可以简化为:
<guests>{/guests/Guest[month-from-date(youth/dateofbirth) = 8]/Gname}</guests>