我还在学习如何使用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,'R#.##')" /></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>
答案 0 :(得分:0)
如果我理解正确,您正在使用XSLT从XML文件创建HTML。这样做的常规方法是运行XSLT处理器,为其提供XSLT和XML文件。无需修改XML文件即可执行此操作。您将XSLT和XML文件提供给处理器,它为您提供转换后的输出文件,在您的情况下将为HTML。
我相信Saxon和Altova都有免费版本的XSLT引擎(以及商业版),所以请尝试下载其中一个并试一试。您只需要从命令行调用XSLT引擎。你也可以使用微软的引擎,只要你不需要XSLT 2。