为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用XSLT创建不同的值

/ 猿问

如何使用XSLT创建不同的值

慕容4345310 2019-11-14 15:10:03

我有这样的XML:


<items>

  <item>

    <products>

      <product>laptop</product>

      <product>charger</product>

    </products>

  </item>

  <item>

    <products>

      <product>laptop</product>

      <product>headphones</product>  

    </products>  

  </item>

</items>

我希望它输出像


笔记本电脑

充电器

头戴式耳机

我正在尝试使用,distinct-values()但我想我做错了什么。谁能告诉我如何使用distinct-values()?谢谢。


<xsl:template match="/">            

  <xsl:for-each select="//products/product/text()">

    <li>

      <xsl:value-of select="distinct-values(.)"/>

    </li>               

  </xsl:for-each>

</xsl:template>

但是它给了我这样的输出:


<li>laptop</li>

<li>charger</li>

<li>laptop></li>

<li>headphones</li>


查看完整描述

3 回答

?
慕姐829404

使用和函数来获取不同值的XSLT 1.0解决方案:keygenerate-id()


<?xml version="1.0" encoding="UTF-8"?>

  <xsl:stylesheet

   version="1.0"

   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" encoding="UTF-8" indent="yes"/>


<xsl:key name="product" match="/items/item/products/product/text()" use="." />


<xsl:template match="/">


  <xsl:for-each select="/items/item/products/product/text()[generate-id()

                                       = generate-id(key('product',.)[1])]">

    <li>

      <xsl:value-of select="."/>

    </li>

  </xsl:for-each>


</xsl:template>


</xsl:stylesheet>


查看完整回答
反对 回复 2019-11-14
?
千万里不及你

这是我过去使用的XSLT 1.0解决方案,我认为它比使用该generate-id()函数更简洁(更易读)。


  <xsl:template match="/">           

    <ul> 

      <xsl:for-each select="//products/product[not(.=preceding::*)]">

        <li>

          <xsl:value-of select="."/>

        </li>   

      </xsl:for-each>            

    </ul>

  </xsl:template>

返回值:


<ul xmlns="http://www.w3.org/1999/xhtml">

  <li>laptop</li>

  <li>charger</li>

  <li>headphones</li>

</ul>


查看完整回答
反对 回复 2019-11-14
?
缥缈止盈

您不希望“输出(不同的值)”,而想要“对于每个(不同的值)”:


<xsl:template match="/">              

  <xsl:for-each select="distinct-values(/items/item/products/product/text())">

    <li>

      <xsl:value-of select="."/>

    </li>

  </xsl:for-each>

</xsl:template>


查看完整回答
反对 回复 2019-11-14
  • 3 回答
  • 0 关注
  • 44 浏览
我要回答
慕课专栏
更多

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信