如何“抓取节点的文本”并将其作为html

时间:2020-07-14 11:46:52

标签: xml xslt tei

我有几个这样的条目:

<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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

当我使用以下内容进行选择时,它实际上可以工作:

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

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

有人可以暗示一个更优雅的答案吗?