我有一个看起来像这样的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>
我正在尝试使用Xpath来获得这样的结果:
Hello.World
Hello2.World2
Hello3.World3
我在下面使用了concat函数但是没有得到正确的结果。
Concat功能:
concat(/element1/element2/element3/element4/text(),".", /element1/element2/element3/element5/text())
结果我得到了:
Hello.World
如何获得正确的结果? 我正在使用XPath与Camel Spring DSL。
修改
XQuery,XSLT和SPel中的解决方案也很受欢迎。
修改
我尝试了字符串连接,但它不起作用:
string-join函数:
string-join((/element1/element2/element3/element4/text(), /element1/element2/element3/element5/text()),".")
结果我得到了:
Hello.Hello2.Hello3.World.World2.World3
答案 0 :(得分:35)
试试这个表达式......
string-join(//element3/(concat(element4/text(), '.', element5/text())), " ")
答案 1 :(得分:13)
我使用了concat方法并且运行良好。
concat(//SomeElement/text(),'_',//OtherElement/text())
答案 2 :(得分: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>
答案 3 :(得分:2)
for $d in $doc/element2/element3
return fn:string-join(fn:data($d/element()), ".")
。
$ doc存储Xml。
答案 4 :(得分:-1)
<xsl:template match="element3">
<xsl:value-of select="element4,element5" separator="."/>
</xsl:template>
答案 5 :(得分:-1)
如果您需要加入xpath选择的文本节点,但不能使用string-join
(当您使用XSL 1.0时),这可能会有所帮助:
<xsl:variable name="x">
<xsl:apply-templates select="..." mode="string-join-mode"/>
</xsl:variable>
joined and normalized: <xsl:value-of select="normalize-space($x)"/>
<xsl:template match="*" mode="string-join-mode">
<xsl:apply-templates mode="string-join-mode"/>
</xsl:template>
<xsl:template match="text()" mode="string-join-mode">
<xsl:value-of select="."/>
</xsl:template>