我的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提供答案。
答案 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>