首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xsl:value-of用作xsl:元素名称

xsl:value-of用作xsl:元素名称
EN

Stack Overflow用户
提问于 2011-01-17 06:35:24
回答 3查看 18.3K关注 0票数 7

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

代码语言:javascript
复制
<list>
  <listItem>
    <name>elementOne</name>
    <value>elementOneValue</name>
  </listItem>
  <listItem>
    <name>elementTwo</name>
    <value>elementTwoValue</name>
  </listItem>
</list>

我正在尝试将其转换为以下结构:

代码语言:javascript
复制
<elementOne>elementOneValue</elementOne>
<elementTwo>elementTwoValue</elementTwo>

这是使用XSL实现的简单逻辑,但我遇到了复杂的问题。

代码语言:javascript
复制
<xsl:for-each select="/list/listItem">
  <xsl:element name="<xsl:value-of select="name"/>">
    <xsl:value-of select="value"/>
  </xsl:element>
</xsl:for-each>

不起作用,因为我假设连续的双引号破坏了<xsl:element>标记

代码语言:javascript
复制
<xsl:for-each select="/list/listItem">
  <<xsl:value-of select="name"/>>
    <xsl:value-of select="value"/>
  </<xsl:value-of select="name"/>>
</xsl:for-each>

不能工作,因为我不能使用<<>>

代码语言:javascript
复制
<xsl:for-each select="/list/listItem">
  &lt;<xsl:value-of select="name"/>&gt;
    <xsl:value-of select="value"/>
  &lt;/<xsl:value-of select="name"/>&gt;
</xsl:for-each>

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-17 06:56:48

这里是一个完整而简短的解决方案,它使用了 XSLT instruction

代码语言:javascript
复制
<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>

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

代码语言:javascript
复制
<list>
    <listItem>
        <name>elementOne</name>
        <value>elementOneValue</value>
    </listItem>
    <listItem>
        <name>elementTwo</name>
        <value>elementTwoValue</value>
    </listItem>
</list>

生成所需的结果

代码语言:javascript
复制
<elementOne>elementOneValue</elementOne>
<elementTwo>elementTwoValue</elementTwo>

注意到

  1. The在紧凑且更具可读性的way.
  2. It中使用<xsl:element> 指令创建静态未知的元素,并使用AVT ()指定name属性,如果 elementOneelementTwo的字符串值不符合元素名称(QName)的词汇/语法规则,则可能引发错误。
票数 14
EN

Stack Overflow用户

发布于 2011-01-17 06:42:00

我相信你可以用大括号代替<xsl:value-of>

代码语言:javascript
复制
<xsl:element name="{name}">
    <xsl:value-of select="value"/>
</xsl:element>
票数 7
EN

Stack Overflow用户

发布于 2011-01-17 06:43:32

我没试过,但这应该行得通。

代码语言:javascript
复制
   <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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4708551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档