当前位置:  开发笔记 > Android > 正文

如何使用XSLT/XPath生成以逗号分隔的列表?

如何解决《如何使用XSLT/XPath生成以逗号分隔的列表?》经验,为你挑选了6个好方法。

鉴于此XML数据:


  apple
  orange
  banana

我可以使用这个XSLT标记:

...

  ,

...

得到这个结果:

苹果,橘子,香蕉,

但是如何生成最后一个逗号不存在的列表?我认为可以按照以下方式做一些事情:

...

  
  ,

...

但测试表达式应该是什么?

我需要一些方法来确定列表的长度以及我当前在列表中的位置,或者,如果我当前正在处理列表中的最后一个元素(这意味着我不关心它有多长或者是什么目前的立场是).



1> Robert Rossn..:

这是一种非常常见的模式:


   
   
      ,
   



2> Willie Wheel..:

看看position(),count()last()功能; 例如, test="position() < last()".



3> Daniel Haley..:

对于XSLT 2.0选项,您可以使用该separator属性xsl:value-of.

这个xsl:value-of:


会产生这个输出:

apple, orange, banana

您还可以使用多个逗号作为分隔符.例如,这个:

'

'

会产生以下输出:

'apple', 'orange', 'banana'

另一个XSLT 2.0选项是string-join()......




4> Marc Gravell..:
,

或者(也许更有效率,但你必须测试):


   
   
       
   



5> Dimitre Nova..:

一个简单的XPath 1.0单线程:

     concat(., substring(',', 2 - (position() != last())))

把它变成这种转变:


 

    
      
        
      
    

并将其应用于XML文档:


    apple
    orange
    banana

得到想要的结果:

apple,orange,banana

编辑:

以下是Robert Rossney对此答案的评论:

对于人类来说,这是非常不透明的代码.它需要你知道关于XSLT的两个非显而易见的事情:1)如果索引超出范围,子串函数会做什么; 2)逻辑值可以隐式转换为数字值.

这是我的答案:

伙计们,从不羞于学习新事物.实际上这是Stack Overflow的全部内容,不是吗?:)



6> jelovirt..:

罗伯特给了经典not(position() = last())答案.这要求您处理整个当前节点列表以获取上下文大小,而在大型输入文档中,这可能会使转换消耗更多内存.因此,我通常将测试反转为第一件事


     

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有