Xml 的xsl:value用作xsl:element名称

Xml 的xsl:value用作xsl:element名称,xml,templates,xslt,value-of,Xml,Templates,Xslt,Value Of,我有一个具有列表结构的传入XML文件: <list> <listItem> <name>elementOne</name> <value>elementOneValue</name> </listItem> <listItem> <name>elementTwo</name> <value>elementTwoValue&

我有一个具有列表结构的传入XML文件:

<list>
  <listItem>
    <name>elementOne</name>
    <value>elementOneValue</name>
  </listItem>
  <listItem>
    <name>elementTwo</name>
    <value>elementTwoValue</name>
  </listItem>
</list>
<elementOne>elementOneValue</elementOne>
<elementTwo>elementTwoValue</elementTwo>

不起作用,因为我在代码中使用了>和<,而不是XML可解析
。我希望这是一个非常简单的解决方案,但我在互联网上找不到它的任何记录。我忽略的简单修复方法是什么?

我相信您可以使用大括号代替


没有尝试过,但这会起作用

   <xsl:for-each select="/list/listItem">
      <xsl:variable name="elemName" select="name"/>
      <xsl:element name="$elemName">
        <xsl:value-of select="value"/>
      </xsl:element>
    </xsl:for-each>

下面是一个完整而简短的解决方案,使用XSLT指令

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

 <xsl:template match="listItem">
   <xsl:element name="{name}">
     <xsl:value-of select="value"/>
   </xsl:element>
 </xsl:template>
</xsl:stylesheet>
<elementOne>elementOneValue</elementOne>
<elementTwo>elementTwoValue</elementTwo>

在提供的XML文档上应用此转换时(更正为格式正确):


元素一
elementOneValue
元素二
elementTwoValue
产生所需结果

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

 <xsl:template match="listItem">
   <xsl:element name="{name}">
     <xsl:value-of select="value"/>
   </xsl:element>
 </xsl:template>
</xsl:stylesheet>
<elementOne>elementOneValue</elementOne>
<elementTwo>elementTwoValue</elementTwo>
elementOneValue
elementTwoValue
注意事项

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

 <xsl:template match="listItem">
   <xsl:element name="{name}">
     <xsl:value-of select="value"/>
   </xsl:element>
 </xsl:template>
</xsl:stylesheet>
<elementOne>elementOneValue</elementOne>
<elementTwo>elementTwoValue</elementTwo>
  • 使用
    指令创建静态未知名称的元素

  • 使用AVT()以简洁易读的方式指定
    name
    属性

  • 如果
    elementOne
    elementTwo
    的字符串值不符合元素名称(QName)的词汇/语法规则,则可能引发错误


  • 好问题,+1。请使用
    :)查看我的答案,以获得完整而简短的解决方案我一直在寻找别的东西,但这就是我一直在寻找的答案。。。谢谢关闭,但需要转义变量
    <elementOne>elementOneValue</elementOne>
    <elementTwo>elementTwoValue</elementTwo>