如何直接在xsl模板中包含子元素

时间:2015-02-18 18:50:01

标签: xml internet-explorer xslt

我有一个模板,显示gpx文件中的航点。目前,我可以将子元素添加到项目的唯一方法是使用模板。有没有办法可以在不使用单独模板的情况下获取子元素的值?所以不要这样做:

<xsl:attribute name="href">
  <xsl:apply-templates select="gpx:link" />
</xsl:attribute>

我可以这样做:

<xsl:attribute name="href">
  <xsl:value-of select="child@href" />
</xsl:attribute>

这是我用它的xml和xsl。

<wpt lat="00.00000000" lon="00.00000000">
    <ele>600</ele>
    <time>2015-02-16T06:12:27Z</time>
    <name><![CDATA[Photo]]></name>
    <link href="2015-02-16_01-12-27.jpg">
        <text>2015-02-16_01-12-27.jpg</text>
    </link>
    <sat>0</sat>
</wpt>

<xsl:template name="wpt-circle">
  <xsl:for-each select="gpx:wpt">
    <circle stroke="black" stroke-width="3" fill="red" r="6">
      <xsl:call-template name="latlonc">
        <xsl:with-param name="lon" select="@lon"/>
        <xsl:with-param name="lat" select="@lat"/>
      </xsl:call-template>
      <xsl:attribute name="text">
        <xsl:apply-templates select="gpx:name" />
      </xsl:attribute>
      <xsl:attribute name="href">
        <xsl:apply-templates select="gpx:link" />
      </xsl:attribute>
    </circle>
  </xsl:for-each>
</xsl:template>

<xsl:template match="gpx:name">
  <xsl:value-of select="." />
</xsl:template>

<xsl:template match="gpx:link">
  <xsl:value-of select="@href" />
</xsl:template>

1 个答案:

答案 0 :(得分:0)

他们正在寻找的语法是

<xsl:attribute name="href">
   <xsl:value-of select="gpx:link/@href" />
</xsl:attribute> 

您可以在此处的select参数中使用任何XPath表达式,而不仅仅是单个子节点。

事实上,你也可以这样做......

<circle stroke="black" stroke-width="3" fill="red" r="6" href="{gpx:link/@href}">

这称为Attribute Value Templates,花括号{}表示要计算的表达式,而不是字面输出。