wake-up-neo.com

Verketten Sie mehrere Knotenwerte in xpath

Ich habe eine XML, die so aussieht

<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>

Ich versuche, Xpath zu verwenden, um ein Ergebnis wie das folgende zu erhalten:

Hello.World
Hello2.World2
Hello3.World3

Ich habe unten die Concat-Funktion verwendet, aber kein korrektes Ergebnis erhalten.

Concat-Funktion:

concat(/element1/element2/element3/element4/text(),".", /element1/element2/element3/element5/text())

Ergebnis habe ich bekommen:

Hello.World

Wie kann ich das richtige Ergebnis erzielen? Ich verwende XPath mit Camel Spring DSL.

Bearbeiten:

Auch Lösungen in XQuery, XSLT und SPel werden geschätzt.

Bearbeiten

Ich habe String-Join versucht und es hat nicht funktioniert:

string-Join-Funktion:

string-join((/element1/element2/element3/element4/text(), /element1/element2/element3/element5/text()),".")

Ergebnis habe ich bekommen:

Hello.Hello2.Hello3.World.World2.World3
34
krishna2642

Versuchen Sie diesen Ausdruck ...

string-join(//element3/(concat(element4/text(), '.', element5/text())), "&#10;")
36
Tim C

Ich habe die Concat-Methode verwendet und funktioniert gut.

concat(//SomeElement/text(),'_',//OtherElement/text())
15
prespic

Hier kommt eine Lösung mit 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>
8
hek2mgl

for $d in $doc/element2/element3 return fn:string-join(fn:data($d/element()), ".").
$ doc speichert die XML.

2
bosari