Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XML数据和XSLT使用HTML创建不同数量的列_Xml_Xslt - Fatal编程技术网

使用XML数据和XSLT使用HTML创建不同数量的列

使用XML数据和XSLT使用HTML创建不同数量的列,xml,xslt,Xml,Xslt,我有XML数据,需要像表格一样进行布局。我将在多个页面上使用它,不同的页面需要不同的列 <Videos> <Video ID="1"> <Title>Video #1</Title> <Img>http//www.test.com/Images/Img1.jpg</Img> <URL>http://www.youtube.com/watch?v=ABCDE12345

我有XML数据,需要像表格一样进行布局。我将在多个页面上使用它,不同的页面需要不同的列

<Videos>
  <Video ID="1">
    <Title>Video #1</Title>
    <Img>http//www.test.com/Images/Img1.jpg</Img>
    <URL>http://www.youtube.com/watch?v=ABCDE12345</URL>
  </Video>
  <Video ID="2">
    <Title>Video #2</Title>
    <Img>http//www.test.com/Images/Img2.jpg</Img>
    <URL>http://www.youtube.com/watch?v=12345ABCDE</URL>
  </Video>
  <Video ID="3">
    <Title>Video #3</Title>
    <Img>http//www.test.com/Images/Img3.jpg</Img>
    <URL>http://www.youtube.com/watch?v=A1B2C3D4E5</URL>
  </Video>
  <Video ID="4">
    <Title>Video #4</Title>
    <Img>http//www.test.com/Images/Img4.jpg</Img>
    <URL>http://www.youtube.com/watch?v=1A2B3C4D5E</URL>
  </Video>
</Videos>
对于不同的页面,我需要每行有2个视频:

Video#1 Video#2 Video#3
Video#4
Video#1 Video#2 
Video#3 Video#4
对于不同的页面,我需要每行有一个视频:

Video#1 
Video#2 
Video#3 
Video#4

谢谢你能给我的任何帮助

这里有一个方法你可以做到这一点。 您只需修改最后一个模板,将实际需要的数据包含在表单元格中

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

  <xsl:output method="html" indent="yes"/>
  
  <!-- Parameter to indicate the number of video elements per row -->
  <xsl:param name="vidCol" select="3"/>

  <xsl:template match="/">
    <html>
      <head>
        <title>Videos</title>
      </head>
      <body>
        <table>
            <xsl:choose>
              <xsl:when test="$vidCol = 1">
                <xsl:apply-templates select="Videos/Video" mode="grouping"/>  
              </xsl:when>
              <xsl:otherwise>
                <xsl:apply-templates select="Videos/Video[position() mod $vidCol = 1]" mode="grouping"/>
              </xsl:otherwise>
            </xsl:choose>
        </table>
      </body>
    </html>
  </xsl:template>
  
  <xsl:template match="Video" mode="grouping">
    <tr>
        <xsl:apply-templates select=". | following-sibling::Video[position() &lt; $vidCol]"/>
    </tr>
  </xsl:template>
  
  <xsl:template match="Video">
    <td>
      <xsl:value-of select="Title"/>
    </td>
  </xsl:template>
  
</xsl:stylesheet>

视频

查看此处的工作情况:

XSLT不“布局”项目,它可能发生在XSL-FO或使用CSS的HTML中,但您需要首先了解这样一种目标格式是如何做到这一点的,只有这样您才能使用XSLT动态生成格式。您使用的是哪种XSLT引擎?它支持XSLT2.0吗?