以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  [求助]XSLT属性动态获取...  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=89037)


--  作者:zxx0519
--  发布时间:1/6/2011 10:03:00 AM

--  [求助]XSLT属性动态获取...
最近要做一个报表 在浏览器上显示 要用到xslt,有个问题一直搞不定。
需求是这样的,读取数据库生成一个xml文件,现在要写一个xsl模板将xml文件转换一下显示出来
xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="GTL-Filter-Template.xsl"?>
<GTL>
  <Session ID="a686656c-a910-4883-b835-003e98dca809" step="Filter">
    <FilterResult>
      <FilterItem Symbol="AA" AverageFC="12.69" Close="12.69" Condition1="true" CurrentBar="476.00" Date="2010/12/16" Open="12.69" Time="15:11:00" Var0 ="1.00"/>
      <FilterItem Symbol="AACC" AverageFC="5.70" Close="5.70" Condition1="true" CurrentBar="88.00" Date="2010/12/16" Open="5.70" Time="14:29:00" Var0 ="1.00"/>
      <FilterItem Symbol="AAI" AverageFC="4.28" Close="4.28" Condition1="true" CurrentBar="455.00" Date="2010/12/16" Open="4.29" Time="15:12:00" Var0 ="1.00"/>
      <FilterItem Symbol="AAON" AverageFC="18.84" Close="18.84" Condition1="true" CurrentBar="208.00" Date="2010/12/16" Open="18.84" Time="15:07:00" Var0 ="1.00"/>
      <FilterItem Symbol="AAP" AverageFC="39.93" Close="39.93" Condition1="true" CurrentBar="447.00" Date="2010/12/16" Open="39.91" Time="15:11:00" Var0 ="1.00"/>
      <FilterItem Symbol="AAPL" AverageFC="201.10" Close="201.10" Condition1="true" CurrentBar="481.00" Date="2010/12/16" Open="201.12" Time="15:11:00" Var0 ="1.00"/>
      <FilterItem Symbol="AAR" AverageFC="18.33" Close="18.33" Condition1="true" CurrentBar="19.00" Date="2010/12/16" Open="18.42" Time="12:24:00" Var0 ="1.00"/>
      <FilterItem Symbol="AATI" AverageFC="3.23" Close="3.23" Condition1="true" CurrentBar="204.00" Date="2010/12/16" Open="3.23" Time="15:06:00" Var0 ="1.00"/>
      <FilterItem Symbol="AAU" AverageFC="0.77" Close="0.77" Condition1="true" CurrentBar="32.00" Date="2010/12/16" Open="0.77" Time="15:04:00" Var0 ="1.00"/>
      <FilterItem Symbol="AAV" AverageFC="5.86" Close="5.86" Condition1="true" CurrentBar="317.00" Date="2010/12/16" Open="5.86" Time="15:06:00" Var0 ="1.00"/>
      <FilterItem Symbol="AAWW" AverageFC="30.31" Close="30.31" Condition1="true" CurrentBar="393.00" Date="2010/12/16" Open="30.27" Time="15:11:00" Var0 ="1.00"/>
    </FilterResult>
  </Session>
</GTL>
上面这个xml中,FilterItem节点的所有属性名都是不固定的,但是每个FilterItem得属性集相同。所以处理起来很不方便,现在要将它显示成表格的样式,我的xsl文件是这样的:
xsl文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="GTL/Session/FilterResult">
 <html>
  <body>
   <h1>Filter Report</h1>
   <p>Session ID : <xsl:value-of select="/GTL/Session/@ID"/></p>
   <hr/>
   <table width="100%" border="1">
    <tr bgcolor="#9acd32">
     <xsl:for-each select="FilterItem[1]/@*">
        <th><xsl:value-of select="name()"/></th>
      </xsl:for-each>
    </tr>
    <xsl:for-each select="GTL/Session/FilterResult/FilterItem">
     <tr>
      <xsl:for-each select="//@*">
        <th><xsl:value-of select="@{name()}"/></th>
       </xsl:for-each>
      </tr>
     </xsl:for-each>
   </table>
   <br/>
   <hr/>
  </body>
 </html>
</xsl:template>
</xsl:stylesheet>

第一个循环 我得到第一个节点的所有属性名,作为表头,之后如何列出所有FilterItem的属性值呢?

我对xml/xslt语法不熟悉,是第一个搞这方面的,临时突击学习,但还是搞不定,请高手指点。


--  作者:Qr
--  发布时间:1/6/2011 1:26:00 PM

--  
随便改了一下,不知道是不是你想要的效果。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="GTL/Session/FilterResult">
<html>
  <body>
   <h1>Filter Report</h1>
   <p>Session ID : <xsl:value-of select="/GTL/Session/@ID"/></p>
   <hr/>
   <table width="100%" border="1">
    <tr bgcolor="#9acd32">
     <xsl:for-each select="FilterItem[1]/@*">
        <th><xsl:value-of select="name()"/></th>
      </xsl:for-each>
    </tr>
    <xsl:for-each select="FilterItem">
     <tr>
      <xsl:for-each select="@*">
        <th><xsl:value-of select="."/></th>
       </xsl:for-each>
      </tr>
     </xsl:for-each>
   </table>
   <br/>
   <hr/>
  </body>
</html>
</xsl:template>
</xsl:stylesheet>


--  作者:zxx0519
--  发布时间:1/6/2011 7:52:00 PM

--  
没错 就是这样的效果 太棒了!!!
谢谢你!
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms