Xml XPath将每个父元素的所有子元素分组

Xml XPath将每个父元素的所有子元素分组,xml,xpath,Xml,Xpath,我必须显示每本书的所有语言。我不知道该怎么做。 我不想显示/books/book/translation中的每种语言,但我想将它们分组到类似于/books/book/title的每本书中,但只有翻译必须显示。所以基本上我把每本书的翻译进行分组 <books> <book> <title>Book One</title> <translation edition="3">Greek</tran

我必须显示每本书的所有语言。我不知道该怎么做。 我不想显示/books/book/translation中的每种语言,但我想将它们分组到类似于/books/book/title的每本书中,但只有翻译必须显示。所以基本上我把每本书的翻译进行分组

<books>
    <book>
        <title>Book One</title>
        <translation edition="3">Greek</translation>
        <translation edition="2">Chinese</translation>
        <translation edition="2">French</translation>
        <translation edition="1">Dutch</translation>
   </book>
   <book>
        <title>Book Two</title>
        <translation edition="2">Dutch</translation>
        <translation edition="4">Chinese</translation>
        <translation edition="2">Greek</translation>
        <translation edition="3">Spanish</translation>
    </book>
</books>
第二个结果:

Dutch
Chinese
Greek
Spanish

我希望这能详细说明一些内容。

下面的XPath将为您提供一个由两个项目组成的序列,每个项目都有每本书的翻译,翻译之间用逗号分隔:

for $book in //book
return
    string-join($book/translation, ",")
这导致:

希腊语、汉语、法语、荷兰语 荷兰语、汉语、希腊语、西班牙语

这就是你要找的吗?如果是这样,一旦理解了上述XPath,就可以将其缩短为:

//book/string-join(translation, ",")

希腊语、汉语、法语、荷兰语等?如果您能提供更多信息,包括所需的结果,这将是非常有帮助的。您能给我们展示一个源示例以及所需的输出吗?输出应该在第一框中:希腊语、中文、法语和荷兰语,在第二框中应该是荷兰语、中文、希腊语和西班牙语,因此基本上每个图书节点都应该显示节点翻译文本。希望你们明白我的意思。我今晚回家后会向你们汇报。adamretter我在Firefox中使用XPath Checker尝试了这个方法,但我发现了一个语法错误。基本上,每本书都应该显示可用的语言。这应该显示在每本书中,因此在XPath检查器中,当您键入XPath时,它应该显示两个结果,一个用于第一本书(显示所有语言),另一个用于第二本书(显示所有语言),但是如果有另一本书,那么第三个结果应该显示用于第三本书(显示所有语言)。我希望这能清除一切,而不是像泥一样清晰。有人告诉我,我不能完全用XPath做我想做的事情。我必须用XSLT来做这件事。我是说XLS样式表。好吧,我想我知道你想要什么,但我想我还没有完全理解你。当然XPath有一定的局限性,但是如果您想要的是
表达式,您可以使用
表达式进行分组。。。如果没有,并且您需要更多的功能,那么XSLT或XQuery肯定是一个选项
//book/string-join(translation, ",")