xslt - 从文本创建节点

时间:2017-10-31 18:39:24

标签: xml xslt

我试图创建一个模板,允许我从文档中的文本生成新元素。例如,如果xml输入是

<c>
  <a>foo</a>
  <b>bar</b>
</c>

我想创建一个生成以下输出的样式表:

<c>
  <a><el att="foo"></a>
  <b><el att="bar></b>
</c>

我写下面的模板

<xsl:template match="text()">
<xsl:element name="el">
  <xsl:attribute name="att"><xsl:value-of select="text()"/></xsl:attribute>
</xsl:element>
</xsl:template>

但这场比赛并没有起作用 - 它考虑了#34;文字&#34;还有其他标签末尾和另一个标签的开头之间的空格,并且未设置属性的值。有人能帮我吗?非常感谢

1 个答案:

答案 0 :(得分:1)

尝试使用xsl:strip-space忽略无关紧要的空格。

此外,在您的模板中,您的上下文已为text(),因此请使用.short for self::node())或normalize-space()

示例(使用AVT略微简化)...

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="text()" priority="1">
    <el att="{.}"/>
  </xsl:template>

</xsl:stylesheet>