我正在使用exists-db来解析XML文档。我正在编写一个xquery脚本来处理文档。
JobPage
我想使用xquery / xpath选择event / @ date =“2015-08-28”的所有事件。
NoneType
<data>
<schedules>
<schedule>
<event date="2015-08-28"/>
<event date="2015-08-29"/>
</schedule>
</schedules>
</data>
let $rawDoc := collection("/db/test")/data/schedules/schedule[event/@date = "2015-08-28"]
似乎日期属性值或我的查询字符串中“ - ”的存在不被视为显式短划线。我不清楚如何逃避“ - ”?我尝试了“ - ”并且没有用(没有返回结果)。
有什么想法吗?
谢谢, TY
答案 0 :(得分:0)
我想使用xquery / xpath选择event / @ date =“2015-08-28”的所有事件。
您使用:
let $rawDoc := collection("/db/test")/data/schedules/schedule[event/@date = "2015-08-28"]
这意味着,给我任何schedule
个元素,该元素至少有一个孩子event
与该日期相对应。
只需将其更改为:
let $rawDoc := collection("/db/test")/data/schedules/schedule/event[@date = "2015-08-28"]
这将为您提供该日期的所有活动元素。
答案 1 :(得分:0)
如果您想要返回schedule
元素并排除所有没有所需日期的event
元素子元素,您可以执行以下操作:
let $rawDoc := collection("/db/test")/data/schedules/schedule
for $schedule in $rawDoc
return element { node-name($schedule) } {
$schedule/@*,
$schedule/node()[self::event[@date='2015-08-28'] |
self::text() |
self::processing-instruction() |
self::comment()]
}
尽管如此,选择所需的event
元素并将其返回到schedule
元素中可能更容易:
let $rawDoc := collection("/db/test")/data/schedules/schedule/event[@date = "2015-08-28"]
for $event in $rawDoc
return <schedule>{$event}</schedule>