连接多个节点xsl
我的 XML:
<?xml version="1.0"?>
<Result>
<Answer questionId="Servicios">Auditoría|Asesoría en Impuestos|</Answer>
<Answer questionId="Servicios">Auditoría|Outsourcing|Asesoría en RRHH|</Answer>
</Result>
我想使用 将每个
或类似的东西,然后计算“|”使用此字符:node()
连接到一个 UNIQUE 变量(例如
) xsl:for-each
<xsl:variable name="total" select="string-length(string($var))-string-length(translate(string($var),'|',''))"/>
如果我这样做:
<xsl:value-of select ="//Result/Answer[@questionId = 'Servicios']//text()"/>
<!--The return is something like an array-->
<!--[1]Auditoría|Asesoría en Impuestos|-->
<!--[2]Auditoría|Outsourcing|Asesoría en RRHH|-->
<!--and the result is '2' it only select the [1] and i need all of them, [1] and [2] in this case-->
我想我必须使用 xsl:for-each 连接所有值,
我使用 xslt version="1.0"
我将不胜感激! 谢谢!
My XML:
<?xml version="1.0"?>
<Result>
<Answer questionId="Servicios">Auditoría|Asesoría en Impuestos|</Answer>
<Answer questionId="Servicios">Auditoría|Outsourcing|Asesoría en RRHH|</Answer>
</Result>
I want to concat each node()
into a UNIQUE variable (<xsl:variable name = "var"/>
for example) using xsl:for-each
or something like that, then count the "|" char using this:
<xsl:variable name="total" select="string-length(string($var))-string-length(translate(string($var),'|',''))"/>
If i do this:
<xsl:value-of select ="//Result/Answer[@questionId = 'Servicios']//text()"/>
<!--The return is something like an array-->
<!--[1]Auditoría|Asesoría en Impuestos|-->
<!--[2]Auditoría|Outsourcing|Asesoría en RRHH|-->
<!--and the result is '2' it only select the [1] and i need all of them, [1] and [2] in this case-->
I think i must concatenate all the values with xsl:for-each
im using xslt version="1.0"
I would appreciate any help!
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
产生所需结果的最短/最简单的 XSLT 转换(
Answer
元素的字符串值的串联)是这样的:当应用于提供的 XML 文档时:
产生了所需的正确结果:
说明:
根节点的字符串值
/
是其所有文本节点后代的串联。更新:如果 XML 文档比提供的文档更复杂并且需要进行一些过滤,这里有一个通用且简单的解决方案,使用相同的想法:
当应用于此 XML 文档时(请注意,我们必须排除第二个
):再次生成所需的正确结果:
The shortest/simplest XSLT transformation that produces the wanted result (the concatenation of the string-values of the
Answer
elements) is this:When applied on the provided XML document:
exactly the wanted, correct result is produced:
Explanation:
The string value of the root node
/
is the concatenation of all of its text-node descendents.The
<xsl:strip-space elements="*"/>
directive eliminates from the XML document all unwanted whitespace-only text nodes.Update: If the XML document is more complex than the provided one and some filtering is required, here is a general and simple solution, using the same idea:
when applied on this XML document (note that we must exclude the second
<Answer>
):again the wanted, correct result is produced:
对于给定的文档,您可以使用
normalize-space(Result)
连接非常简单,但请注意,在计数代码中甚至不需要它。此样式表:
仅输出结果“5”,甚至不使用
for-each
。OP编辑后更新:
For the given document, you can concatenate pretty simple with
normalize-space(Result)
but note that it is not even necessary in your count code.This stylesheet:
just outputs the result '5' without even using a
for-each
.UPDATE after OP's edit: