使用 XQuery 获取以较小值开始的子节点
Getting childnodes starting with a lesser value with XQuery
我想编写一个 XQuery 表达式来获取所有子节点,该子节点的值小于前一个子节点的值,并以最后一个子节点结束。因此,对于下面的示例,我想获得值为 1 和 2 的子节点:
<node>
<childnode>
<value>4</value>
</childnode>
<childnode>
<value>8</value>
</childnode>
<childnode>
<value>1</value>
</childnode>
<childnode>
<value>2</value>
</childnode>
</node>
XQuery 3.1 中最优雅的解决方案是什么?
此致
tumbling window
子句允许表达。
XQuery in BaseX
xquery version "3.1";
declare context item := document {
<node>
<childnode>
<value>4</value>
</childnode>
<childnode>
<value>8</value>
</childnode>
<childnode>
<value>1</value>
</childnode>
<childnode>
<value>2</value>
</childnode>
</node>
};
<root>
{
for tumbling window $w in /node/childnode
start $s previous $p when xs:decimal($s/value) lt xs:decimal($p/value)
return $w
}
</root>
Output
<root>
<childnode>
<value>1</value>
</childnode>
<childnode>
<value>2</value>
</childnode>
</root>
<node>
<childnode>
<value>4</value>
</childnode>
<childnode>
<value>8</value>
</childnode>
<childnode>
<value>1</value>
</childnode>
<childnode>
<value>2</value>
</childnode>
</node>
/childnode[value lt preceding-sibling::childnode[1]/value][1]
/(self::childnode|following-sibling::childnode)
我想编写一个 XQuery 表达式来获取所有子节点,该子节点的值小于前一个子节点的值,并以最后一个子节点结束。因此,对于下面的示例,我想获得值为 1 和 2 的子节点:
<node>
<childnode>
<value>4</value>
</childnode>
<childnode>
<value>8</value>
</childnode>
<childnode>
<value>1</value>
</childnode>
<childnode>
<value>2</value>
</childnode>
</node>
XQuery 3.1 中最优雅的解决方案是什么?
此致
tumbling window
子句允许表达。
XQuery in BaseX
xquery version "3.1";
declare context item := document {
<node>
<childnode>
<value>4</value>
</childnode>
<childnode>
<value>8</value>
</childnode>
<childnode>
<value>1</value>
</childnode>
<childnode>
<value>2</value>
</childnode>
</node>
};
<root>
{
for tumbling window $w in /node/childnode
start $s previous $p when xs:decimal($s/value) lt xs:decimal($p/value)
return $w
}
</root>
Output
<root>
<childnode>
<value>1</value>
</childnode>
<childnode>
<value>2</value>
</childnode>
</root>
<node>
<childnode>
<value>4</value>
</childnode>
<childnode>
<value>8</value>
</childnode>
<childnode>
<value>1</value>
</childnode>
<childnode>
<value>2</value>
</childnode>
</node>
/childnode[value lt preceding-sibling::childnode[1]/value][1]
/(self::childnode|following-sibling::childnode)