Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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创建表_Xml_Xslt - Fatal编程技术网

Xml XSLT创建表

Xml XSLT创建表,xml,xslt,Xml,Xslt,我有一个行数未知的xml表,如下所示: <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="Realone.xsl"?> <norm builddate="xxxxxxxxxxxxxx" doknr="xxxxxxxxxxxxxxxxxxx"> <textdata> <text format="XML"> <

我有一个行数未知的xml表,如下所示:

  <?xml version="1.0" encoding="utf-8"?>
 <?xml-stylesheet type="text/xsl" href="Realone.xsl"?>
 <norm builddate="xxxxxxxxxxxxxx" doknr="xxxxxxxxxxxxxxxxxxx">
  <textdata>
  <text format="XML">
   <Content>
   <BR />
   <table frame="all" pgwide="1" tabstyle="tab2" tocentry="%yes;">
          <tgroup align="left" char="" charoff="50" cols="3" colsep="1" rowsep="1">
            <colspec colname="col1" colnum="1" />
            <colspec colname="col2" colnum="2" />
            <colspec colname="col3" colnum="3" />
            <thead valign="bottom">
              <row>
                <entry VJ="1" align="center" colname="col1" colsep="1" rowsep="1" valign="top">Color</entry>
                <entry VJ="1" align="center" colname="col2" colsep="1" rowsep="1" valign="top">Number1</entry>
                <entry VJ="1" align="center" colname="col3" valign="top">Number2</entry>
              </row>
            </thead>
            <tbody valign="top">
              <row>
                <entry VJ="1" align="left" colname="col1" colsep="1" rowsep="1" valign="top">blue</entry>
                <entry VJ="1" align="left" colname="col2" colsep="1" rowsep="1" valign="top">11-11-11</entry>
                <entry VJ="1" align="left" colname="col3" colsep="1" rowsep="1" valign="top">44</entry>
              </row>
              <row>
                <entry VJ="1" align="left" colname="col1" colsep="1" rowsep="1" valign="top">Red</entry>
                <entry VJ="1" align="left" colname="col2" colsep="1" rowsep="1" valign="top">22-22-22</entry>
                <entry VJ="1" align="left" colname="col3" colsep="1" rowsep="1" valign="top">33</entry>
              </row>
 </tbody>
 </tgroup>
</Content>
</text>
请注意: 1.无法更改xml文件(我的输入)。 2.不知道有多少行

我如何使用XSLT来管理它?
提前感谢。

假设行和行顺序由
colspec
指定。您可以这样做:

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

    <xsl:template match="table">
        <table>
            <xsl:apply-templates select="tgroup/*/row" />
        </table>

    </xsl:template>

    <xsl:template match="row" >
        <xsl:variable name="row" select="." />
        <tr>
            <xsl:for-each select ="../../colspec">
                <td>
                    <xsl:value-of select="$row/entry[@colname=current()/@colname]"/>
                </td>
            </xsl:for-each>
        </tr>
    </xsl:template>

</xsl:stylesheet>


即使缺少行或者行的顺序不同,这也应该有效。也可以将
xsl:sort
添加到colspec中,用于每个请发布您的输入和相应所需输出的示例我发布的xml快照是我的输入。例如,请参见OK,将看一看,谢谢:)我刚刚看到您的编辑,您的(xml)表确实是xslt样式表的一部分?天哪,不,对不起,我今天很头疼,不,XML不是我xslt样式表中的一部分,对不起。当我测试它时,它没有显示任何内容,只有空白。它工作正常,我真的很抱歉,今天不是我的日子,非常头痛,我意识到我的错误。谢谢你的回答:)
Color   Number 1    Number2
Blue    11-11-11    44
Red     22-22-22    33
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="table">
        <table>
            <xsl:apply-templates select="tgroup/*/row" />
        </table>

    </xsl:template>

    <xsl:template match="row" >
        <xsl:variable name="row" select="." />
        <tr>
            <xsl:for-each select ="../../colspec">
                <td>
                    <xsl:value-of select="$row/entry[@colname=current()/@colname]"/>
                </td>
            </xsl:for-each>
        </tr>
    </xsl:template>

</xsl:stylesheet>