按类型分组的xslt字段

时间:2018-06-21 12:25:26

标签: xslt

我有一些数据要输入(图像,标题,文本)。我在xslt中为每个元素分别设置了3个不同的元素:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:udt="DotNetNuke/UserDefinedTable" exclude-result-prefixes="udt">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
  <!--
  This prefix is used to generate module specific query strings
  Each querystring or form value that starts with udt_{ModuleId}_param 
  will be added as parameter starting with param
  -->
  <xsl:variable name="prefix_param">udt_<xsl:value-of select="//udt:Context/udt:ModuleId" />_param</xsl:variable>


   <xsl:template match="udt:Data" mode="list">

        <xsl:value-of select="udt:Image" disable-output-escaping="yes" />

        <xsl:value-of select="udt:Title" disable-output-escaping="yes" />

        <xsl:value-of select="udt:Text" disable-output-escaping="yes" />

  </xsl:template>


  <xsl:template match="/udt:UserDefinedTable">
    <xsl:variable name="currentData" select="udt:Data" />


    <xsl:if test="$currentData">

                <xsl:apply-templates select="$currentData" mode="list">
                </xsl:apply-templates>

    </xsl:if>



  </xsl:template>

  <xsl:template name="EditLink">
    <xsl:if test="udt:EditLink">
      <a href="{udt:EditLink}">
        <img border="0" alt="edit" src="{//udt:Context/udt:ApplicationPath}/images/edit.gif" />
      </a>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

我想将这些元素分别填充到自己的div组中,所以最终结果将是这样的:

<div id="images">
    <!--all images here-->
</div>
<div id="title">
    <!--all titles here-->
</div>
<div id="text">
    <!--all texts here-->
</div>

这可以通过任何形式的分组还是正确的方法来实现?

1 个答案:

答案 0 :(得分:1)

xsl:value-of用于3种元素类型的概念是错误的, 由于此说明仅复制了这些元素的内容, 没有XML标记。

假设唯一的目标是对元素进行重新排序(分组), 它们是当前元素(udt:Data)的直接后代, 该任务可以通过以下方式完成:

<xsl:template match="udt:Data">
  <xsl:copy>
    <div id="images">
      <xsl:copy-of select="udt:Image"/>
    </div>
    <div id="title">
      <xsl:copy-of select="udt:Title"/>
    </div>
    <div id="text">
      <xsl:copy-of select="udt:Text"/>
    </div>
  </xsl:copy>
</xsl:template>

当然,这只是一个模板,而不是整个脚本。

请注意,例如如果这些元素也位于“更深”的子孙级别, 以上所有XPath表达式均应以descendant::开头。

并记住在脚本中包含该脚本所引用的所有名称空间。 应该在stylesheet标签中声明它们。