I have a XML that looks like this
我有一个像这样的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>
I am trying to use Xpath to get a result like this:
我尝试使用Xpath来得到这样的结果:
Hello.World
Hello2.World2
Hello3.World3
I used concat function below but I did not get correct result.
下面我使用了concat函数,但是没有得到正确的结果。
Concat function:
Concat函数:
concat(/element1/element2/element3/element4/text(),".", /element1/element2/element3/element5/text())
Result I got:
结果我得到了:
Hello.World
How can I get the correct result? I am using XPath with Camel Spring DSL.
我怎样才能得到正确的结果?我使用的是XPath和驼峰Spring DSL。
Edit:
编辑:
Solutions in XQuery, XSLT and SPel are also appreciated.
还欢迎XQuery、XSLT和SPel中的解决方案。
Edit
编辑
I tried string-join and it did not work:
我试着加入,但没有成功:
string-join function:
string-join功能:
string-join((/element1/element2/element3/element4/text(), /element1/element2/element3/element5/text()),".")
Result I got:
结果我得到了:
Hello.Hello2.Hello3.World.World2.World3
5 个解决方案
#1
29
Try this expression...
试试这个表情……
string-join(//element3/(concat(element4/text(), '.', element5/text())), " ")
#2
12
I used concat method and works well.
我使用了concat方法,效果很好。
concat(//SomeElement/text(),'_',//OtherElement/text())
#3
7
Here comes a solution with XSLT
:
下面是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>
#4
1
for $d in $doc/element2/element3 return fn:string-join(fn:data($d/element()), ".")
.
$doc stores the Xml.
$doc/element2/element3返回fn:string-join(fn:data($d/element())), "."$ doc存储Xml。
#5
0
<xsl:template match="element3">
<xsl:value-of select="element4,element5" separator="."/>
</xsl:template>
#1
29
Try this expression...
试试这个表情……
string-join(//element3/(concat(element4/text(), '.', element5/text())), " ")
#2
12
I used concat method and works well.
我使用了concat方法,效果很好。
concat(//SomeElement/text(),'_',//OtherElement/text())
#3
7
Here comes a solution with XSLT
:
下面是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>
#4
1
for $d in $doc/element2/element3 return fn:string-join(fn:data($d/element()), ".")
.
$doc stores the Xml.
$doc/element2/element3返回fn:string-join(fn:data($d/element())), "."$ doc存储Xml。
#5
0
<xsl:template match="element3">
<xsl:value-of select="element4,element5" separator="."/>
</xsl:template>