当前位置: 首页 > 知识库问答 >
问题:

XSLT:如何将属性传输到新标签

常波
2023-03-14

我是XSLT的新手,不知道如何将属性从子标记复制到新标记。我很确定这是一个愚蠢的初学者的错误。

输入文件为:


    <?xml version="1.0" encoding="UTF-8"?>
    <navMap>
    <navPoint>
      <navLabel>
        <text>Chapter 1</text>
      </navLabel>
      <content src="Text/chapter01.html"/>
    </navPoint>
    </navMap>

到目前为止,我拥有的XSLT是:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
       <xsl:for-each select="navMap/navPoint">
            <h1><span><xsl:value-of select="./content/@src" /></span><xsl:value-of select="./navLabel/text" /></h1>
       </xsl:for-each>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

这将生成:

<h1><span>Text/chapter01.html</span>Chapter 1</h1>

但是,我需要:

<h1 href="Text/chapter01.html">Chapter 1</h1>

如何向h1标签添加新的href属性并复制内容标签的src属性的值?

我试过:

<h1 href="<xsl:value-of select="./content/@src" />"><xsl:value-of select="./navLabel/text" /></h1>

但这产生了一个语法错误。

共有1个答案

和斌
2023-03-14

首选方法通常是使用属性值模板。

<xsl:template match="/">
  <html>
  <body>
       <xsl:for-each select="navMap/navPoint">
            <h1 href="{content/@src}">
                <xsl:value-of select="navLabel/text" />
            </h1>
       </xsl:for-each>
  </body>
  </html>
</xsl:template>

花括号表示要计算的表达式,而不是逐字输出。

您还可以使用xsl:属性来创建属性

<xsl:template match="/">
  <html>
  <body>
       <xsl:for-each select="navMap/navPoint">
            <h1>
                <xsl:attribute name="href">
                    <xsl:value-of select="content/@src" />
                </xsl:attribute>
                <xsl:value-of select="navLabel/text" />
            </h1>
       </xsl:for-each>
  </body>
  </html>
</xsl:template>

但正如你所看到的,这篇文章有点冗长。但是,如果您希望它是有条件的(即仅在某些情况下添加),或者如果表达式太复杂,无法放入属性值模板,则可以使用此选项。

 类似资料:
  • 您能帮助我使用xslt实现以下预期输出吗。 输入 预期输出

  • 问题内容: 这是我的问题: 当我用JavaScript编写此代码时 // 好: 但是,当我尝试在属性标签中动态设置该值时,没有任何执行。 // 不好: 有人可以帮我吗? 问题答案: Struts标签,例如JSTL,EL等,是在服务器端执行的。执行完所有这些步骤后,仅HTML的最终页面将呈现给客户端。只有这样,JavaScript才能在页面上运行。 您不能混合使用javascript和Struts标

  • 问题内容: 这是我的问题: 当我用JavaScript编写此代码时 // 好: 但是,当我尝试在属性标签中动态设置该值时,没有任何执行。 // 不好: 有人可以帮我吗? 问题答案: Struts标签,例如JSTL,EL等,是在服务器端执行的。执行完所有这些步骤后,仅HTML的最终页面将呈现给客户端。只有这样,JavaScript才能在页面上运行。 您不能混合使用javascript和Struts标

  • 问题内容: 好的,所以我想将一个非常基本的数组传递到jquery数据attrubute服务器端,如下所示: 然后像这样回撤: 为什么这似乎会警告’[‘而不是’a’(请参阅JSfiddle链接) JSFiddle链接: http : //jsfiddle.net/ktw4v/3/ 问题答案: 它将变量视为字符串,其第零个元素为。 发生这种情况是因为您的字符串不是有效的JSON,它应使用双引号而不是单

  • 在使用PingFederate进行单点登录期间,我需要将数据从一个系统传递到另一个系统。 目前我的链接如下所示: 目标资源,解码,如下所示: pingfederate处理请求后,它最终会向其他公司发送一封邮件,将整个TargetResource复制到RelayState、params和all中: 我的目标是以某种方式将 paramOne 和 paramTwo 传递到 SAML 属性中,但不要将这些

  • 问题内容: 我有一个主类,期望使用-D选项传递某些属性。我可以通过将其作为VM选项发送来在IDE中访问它。 我使用Maven并在尝试以下操作时将此应用程序打包到jar文件中: 要么 没有获取环境系统属性。 关于发生了什么的任何指示? 问题答案: 在。之前传递参数。如果在jar文件之后传递它们,它们将被解释为命令行参数并传递给in 。喜欢,