如何 "grab text of a node" 并将其作为数据元素放入 html

How to "grab text of a node" and put it as data-element in html

我有几个这样的条目:

<place label="Juan Fernandez"><placeName>Juan Fernandez</placeName><location><geo>-33.666667, -78.833333</geo></location></place>

我想把它改造成

   <span label="Juan Fernandez" data-boo-coordinates ="-33.666667, -78.833333"> Juan Fernandez <location><geo>-33.666667, -78.833333</geo></location></span>

对于标签,没有大惊小怪:

<xsl:template match="tei:place">
  <xsl:element name="span">
  <xsl:attribute name="label">
    <xsl:text>{@label}</xsl:text>
  </xsl:attribute>

我认为类似的方法应该有效并尝试了几种方法,我将在下面列出: 很自然地,以下内容不起作用:

  <xsl:attribute name="data-boo-coordinates">
    <xsl:value-of select="geo"/>
  </xsl:attribute>

不过,我认为这个应该可行:

  <xsl:attribute name="data-boo-coordinates">
    <xsl:value-of select="place/location/geo"/>
  </xsl:attribute>

位置元素的完整模板

<xsl:template match="tei:place">
  <xsl:element name="span">
  <xsl:attribute name="label">
    <xsl:text>{@label}</xsl:text>
  </xsl:attribute>
  <xsl:attribute name="data-boo-coordinates">
    <xsl:value-of select="*/location/geo"/>
  </xsl:attribute>
    <xsl:apply-templates/>
  </xsl:element>
</xsl:template>

如你所见,我又改了一点,希望它能通过<xsl:value-of>获取节点的文本。我在做某事吗?在这里完全愚蠢?

祝你一切顺利,谢谢你抽出时间, K

当我对 select 使用以下内容时,它确实有效:

  <xsl:attribute name="data-boo-coordinates">
    <xsl:value-of select="child::location/geo"/>
  </xsl:attribute>

上下文很重要,我猜 :-/

任何人都可以暗示更优雅的答案吗?

为什么不能使用文字结果元素和属性值模板

<xsl:template match="tei:place">
  <span label="{@label}" data-boo-coordinates="{location/geo}">
    <xsl:apply-templates/>
  </span>
</xsl:template>