XSLT从标签复制文本

时间:2014-03-24 17:56:56

标签: xml xslt

获得此XML

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="albaran.xsl"?>
<albaran>
   <articulo precio="1.23" unidades="3">Tornillos</articulo>
   <articulo precio="2.34" unidades="5">Arandelas</articulo>
   <articulo precio="3.45" unidades="7">Tuercas</articulo>
   <articulo precio="4.56" unidades="9">Alcayatas</articulo>
</albaran>  

XSLT输出必须是名为&#34; total&#34;的属性。它会增加&#34; unidades&#34; *&#34; precio&#34;。所以输出必须是例如:

 <articulo total="3.69">Tornillos</articulo>

但是我无法将文本复制到&#34; articulo&#34;,我得到&#34; Tornillos&#34;每次......这是我的XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="albaran">
<xsl:copy>
  <xsl:apply-templates/>
</xsl:copy>
</xsl:template>

<xsl:template match="articulo">
<xsl:copy>
  <xsl:attribute name="total">
    <xsl:value-of select="@precio * @unidades"/>
  </xsl:attribute>
  <xsl:value-of select="//articulo"/>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>

2 个答案:

答案 0 :(得分:1)

<xsl:value-of select="//articulo"/>正在选择:

//来自任何地方

articulo抓住第一个关节

更改为<xsl:value-of select="."/>,这是当前范围的值。当前范围已由match的{​​{1}}部分设置。

答案 1 :(得分:0)

您可以使用:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="albaran">
    <xsl:copy>
        <xsl:apply-templates/>
    </xsl:copy>
</xsl:template>

<xsl:template match="articulo">
    <xsl:copy>
        <xsl:attribute name="total">
            <xsl:value-of select="@precio * @unidades"/>
        </xsl:attribute>
        <xsl:apply-templates/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>