从元素文本创建标记QNames

时间:2016-01-18 19:47:49

标签: xml xslt

我有两个问题与XML到XML的转换有关。

  1. 如何使一个新元素的名称是现有元素的值(在我的例子中,现有元素<author>的值是Mike,我想创建一个名为Mike的新标记。)

  2. 如何使一个新元素属性名称是现有元素的值(在我的示例中,现有元素<grade>的值为5,我想创建一个名为Mike的新标记,其属性名称为&# 34; 5&#34)。这是我的例子:

  3. 现有XML:

    <art>
      <images>
        <image>
          <title>Cat</title>
          <author>Mike</author>
          <grade>5<grade>
        </image>
        <image>
          <title>Snake</title>
          <author>John</author>
          <grade>4<grade>
        </image>
      </images>
    </art>
    

    标签艺术中的新元素:

    <authors>
      <Mike grade="5">
        <field_of_art>photography</field_of_art>
      </Mike>
    </authors>
    

1 个答案:

答案 0 :(得分:2)

因此,您可以使用<xsl:element><xsl:attribute>代码执行此操作:

<!-- assumes the current context is an image tag -->
<xsl:element name="{author}">
    <xsl:attribute name="grade">
        <xsl:value-of select="grade" />
    </xsl:attribute>
    <field_of_art>photography</field_of_art>
</xsl:element>

但要注意 - 如果author标记包含空格或无效字符,则它无法正常工作。例如,如果您有<author>Mike 2</author>,则样式表将失败,因为标记名称不能包含空格,或者如果存在<author>Mike&amp;Jane</author>,则样式表也会失败。