链接HTML文件中的XML和XSLT文件

时间:2012-10-26 15:17:17

标签: html xml xslt

我还在学习如何使用XML和XSL来创建HTML输出文件,并且由于stackoverflow而得到了很大的改进。

我有一个自动生成的XML文件但是每次创建新的XML时我都无法告诉XML文件XSLT文件的位置。
有没有办法创建一个HTML文件,当用户打开它时,HTML将“href”到XML和XSLT并将其输出为预期的HTML结果,就像在HTML中包含CSS或Javascript一样。

谢谢你, 罗宾

这是从我们使用的程序生成的XML文件...

<Root>
<Ticket>
<TicketStart Date="2012-10-22" />
<Clubcard Opcode="96" Function="27" CardAcc="1" QualSpendInfo="0" SchemeNo="40" CardNo="1042540000026" PointsToDate="0" RedemptionValue="0" CustomerUpdateDate="000000" QualSpent="0" Date="2012-10-22" />
<ClubcardPoints Opcode="96" Function="28" SchemeNo="40" PromNo="0" CardNo="1042540000026" QualSpend="30005" PointSpend="0" Points="6" BonusPoints="0" PromCount="0" Date="2012-10-22" />
<Clubcard Opcode="96" Function="27" CardAcc="1" QualSpendInfo="1" SchemeNo="40" CardNo="1042540000026" PointsToDate="0" RedemptionValue="0" CustomerUpdateDate="000000" QualSpent="30005" Date="2012-10-22" />
<TicketEnd Date="2012-10-22" />
</Ticket>
<Ticket>
<TicketStart Date="2012-10-22" />
<TicketEnd Date="2012-10-22" />
</Ticket>
<Events>
</Events>
<Ticket>
<TicketStart Date="2012-10-22" />
<Clubcard Opcode="96" Function="27" CardAcc="1" QualSpendInfo="0" SchemeNo="40" CardNo="1042540000057" PointsToDate="0" RedemptionValue="0" CustomerUpdateDate="000000" QualSpent="0" Date="2012-10-22" />
<ClubcardPoints Opcode="96" Function="28" SchemeNo="40" PromNo="0" CardNo="1042540000057" QualSpend="18025" PointSpend="0" Points="3" BonusPoints="0" PromCount="0" Date="2012-10-22" />
<Clubcard Opcode="96" Function="27" CardAcc="1" QualSpendInfo="1" SchemeNo="40" CardNo="1042540000057" PointsToDate="0" RedemptionValue="0" CustomerUpdateDate="000000" QualSpent="18025" Date="2012-10-22" />
<TicketEnd Date="2012-10-22" />
</Ticket>
<Events>
</Events>
</Root>

`

目前我必须把它放在XML文件的开头

<?xml version="1.0" encoding="utf-8"?>
 <?xml-stylesheet type="text/xsl" href="XSLnice.xsl"?>

XSL文件看起来像这样......

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html"/>
  <xsl:template match="/">
    <html>
      <head>
    <title>StoreLine Loyalty Sales</title>
      </head>
    <body>
      <br/>
      <br/>
      <br/>
       <b>Loyal Customers</b>
      <br/>
      <br/>
    <table width="100%" border="3">
      <THEAD>
      <TR bgcolor="RGB(0, 204, 51)">
      <TD width="25%">
        <font color="white"><B>Account Number</B></font>
      </TD>
      <TD width="25%">
        <font color="white"><B>Points</B></font>
      </TD>
      <TD width="25%">
        <font color="white"><B>Date</B></font>
      </TD>
      <TD width="25%">
        <font color="white"><B>Qualified Spent</B></font>
      </TD>
      </TR>
      </THEAD>
    <TBODY>
    <xsl:for-each select="Root/Ticket/ClubcardPoints">
      <TR>
      <TD width="25%"><xsl:value-of select="@CardNo" /></TD>
      <TD width="25%"><xsl:value-of select="@Points" /></TD>
      <TD width="25%"><xsl:value-of select="@Date" /></TD>
      <TD width="25%"><xsl:value-of select="format-number(@QualSpend div 100,'&#x52;#.##')" /></TD>
    </TR>
    </xsl:for-each>
    </TBODY>
    </table>
  </body>
</html>
</xsl:template>
</xsl:stylesheet>

`

将这些文件放在同一个文件夹中,我双击XML文件,它向我提供了一个友好的报告,其中包含我在XML中需要的值。因此,如果我只需双击一个HTML文件,并且每次将新XML放在同一文件夹中,HTML就会找到XML并使用XSL作为样式表来呈现自己。而不是每次都必须手动更新XML并告诉它使用XSL。

此外,我已尝试但未成功将“CardNo”分组,并报告使用了多少次,获得了多少'积分'以及“合格金额”多少。而不是这个长条目列表,如合并报告。

非常感谢你......

这是首选的输出文件...

<THEAD>
                <TR bgcolor="RGB(0, 204, 51)">
                    <TD width="25%"><font color="white"><B>Account Number</B></font></TD>
                    <TD width="25%"><font color="white"><B>Total Points</B></font></TD>
                    <TD width="25%"><font color="white"><B>Date</B></font></TD>
                    <TD width="25%"><font color="white"><B>Total Qualified Spent</B></font></TD>
                </TR>
            </THEAD>
            <TBODY>
                <TR>
                    <TD width="25%">1042540000002</TD>
                    <TD width="25%">100</TD>
                    <TD width="25%">2012-10-22</TD>
                    <TD width="25%">R750.32</TD>
                </TR>

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您正在使用XSLT从XML文件创建HTML。这样做的常规方法是运行XSLT处理器,为其提供XSLT和XML文件。无需修改XML文件即可执行此操作。您将XSLT和XML文件提供给处理器,它为您提供转换后的输出文件,在您的情况下将为HTML。

我相信Saxon和Altova都有免费版本的XSLT引擎(以及商业版),所以请尝试下载其中一个并试一试。您只需要从命令行调用XSLT引擎。你也可以使用微软的引擎,只要你不需要XSLT 2。