在xpath中连接多个节点值

kri*_*642 36 xml xslt xpath xquery spring-el

我有一个看起来像这样的XML

<element1>
    <element2>
        <element3>    
            <element4>Hello</element4>
            <element5>World</element5>
        </element3>
        <element3>    
            <element4>Hello2</element4>
            <element5>World2</element5>
        </element3>
        <element3>    
            <element4>Hello3</element4>
            <element5>World3</element5>
        </element3>
    </element2>
</element1>
Run Code Online (Sandbox Code Playgroud)

我试图使用Xpath得到这样的结果:

Hello.World
Hello2.World2
Hello3.World3
Run Code Online (Sandbox Code Playgroud)

我在下面使用了concat函数但是没有得到正确的结果.

Concat功能:

concat(/element1/element2/element3/element4/text(),".", /element1/element2/element3/element5/text())
Run Code Online (Sandbox Code Playgroud)

结果我得到了:

Hello.World
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到正确的结果?我正在使用XPath与Camel Spring DSL.

编辑:

XQuery,XSLT和SPel中的解决方案也很受欢迎.

编辑

我尝试了字符串连接,但它不起作用:

字符串连接函数:

string-join((/element1/element2/element3/element4/text(), /element1/element2/element3/element5/text()),".")
Run Code Online (Sandbox Code Playgroud)

结果我得到了:

Hello.Hello2.Hello3.World.World2.World3
Run Code Online (Sandbox Code Playgroud)

Tim*_*m C 36

试试这个表达......

string-join(//element3/(concat(element4/text(), '.', element5/text())), "&#10;")
Run Code Online (Sandbox Code Playgroud)

  • 如果你想要一个结果序列,更简洁的方法是使用`// element3/string-join(element4 | element5,".")`,如果你必须有一个字符串,那么,`string- join(// element3/string-join(element4 | element5,"."),"&#xa;")`是另一个公式,恕我直言更具可读性. (4认同)

pre*_*pic 15

我使用concat方法并且效果很好.

concat(//SomeElement/text(),'_',//OtherElement/text())
Run Code Online (Sandbox Code Playgroud)


hek*_*mgl 8

这里有一个解决方案XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="//element3">
    <xsl:value-of select="element4/text()" />.<xsl:value-of select="element5/text()" />
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

  • 对此进行投票的重点是什么?请注意,`string-join()`仅适用于XPath2.0.这就是我建议使用XSLT的原因 (4认同)