我有这样的DTD:的XPath递归定义
<!ELEMENT Root (Thread*) >
<!ELEMENT Thread(ThreadId, Message) >
<!ELEMENT Replies(message+) >
<!ELEMENT message(timestamp, sender, recipient, subject, text, Replies?)>
所以线程将有一个消息,这个消息可以有一个节点“回复”,那么这个节点可以包含消息,并依此类推,直到结构的底部。
现在我想要做的是首先检索具有最多消息的线程的ID,然后检索具有最长嵌套应答链的线程的ID。
这感觉就像一个递归问题,但我无法在XPath中处理它。到目前为止,我尝试过这样的事情:
For $thread in //thread
Count(descendant-or-self::$thread/message)
对于每个线程我试着算儿童信息节点的数量,但这种方法计算的线程的所有子节点的数量,因此包括回复节点。
我对这种问题感到迷茫,因为我无法弄清楚在这些'递归情况下'要做什么。
那么您可以访问哪个版本的XPath? 2.0,3.0,3.1? –