对于每个xslt仅查看第一项

时间:2016-03-24 18:25:20

标签: javascript xml xslt

我的XML看起来像

<xsl:for-each select="/data/groups/@name"><value-of select="/data/groups/@name"/></for-each>

使用时

str = '<data-default-alt="Ford Truck"></h3></a></div><div class="tileInfo"><div class="swatchesBox--empty"></div><div class="promo-msg-text"> <span class="calloutMsg-promo-msg-text"></span> </div><div class="pricecontainer" data-pricetype="Stand Alone"><p id="price_206019013" class="price price-label ">$1,000.00</p>'

import re

brand=re.search('<data-default-alt=\"(.*?)">',str)
cost=re.search('\$(\d+,?\d*\.\d+)</p>',str)
if brand:
        print brand.group(1)
if cost:
        print cost.group(1)

我得到Group1Group1Group1而不是Group1Group2Group3。

为什么每个人只看第一个项目而不是所有三个项目。

请以纯javascript或xslt提供答案。

3 个答案:

答案 0 :(得分:2)

<xsl:for-each select="/data/groups/@name">会将您置于@name的上下文中。从这个上下文中,您只需要获取当前节点的值:

<value-of select="."/>

现在的方式是,您正在重复选择所有 @name属性(从根开始) - 并且(在XSLT 1.0中)xsl:value-of指令返回仅限所选节点集中第一个节点的值。

答案 1 :(得分:2)

我可以使用以下数据(XML)和XSL代码

使其工作

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="/">
<xsl:for-each select="data/groups">
<xsl:value-of select="@name"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

数据

<?xml version="1.0" encoding="UTF-8"?>
<data>
<groups name="Group1"/>
<groups name="Group2"/>
<groups name="Group3"/>
</data>

命令

  

xsltproc t1.xslt t1.xml

输出

<?xml version="1.0"?>
Group1Group2Group3

答案 2 :(得分:1)

您编写的xsl为文档中的每个/ data / groups选择第一个/ data / groups的name属性。您需要将for-each和value-of更改为以下内容:

<xsl:for-each select="/data/groups">
   <xsl:value-of select="@name"/>
</xsl:for-each>