Jag tänkte köra XML som databas. Har inte testat på datum, men compare(comp1,comp2) kanske kan användas? Att få fram dagens datum bör det väl finnas någon date-funktion för kan jag tycka. Ev. att man måste göra om datumet till nummer (ta bort -) för att kunna använda > också. current-dateTime() finns. Men hur? Skulle kunna tänka mig nåt sånt här på ett ungefär. Bara testade att lägga till <xsl:variable name="now" select="current-dateTime()"/> men det funkar inte. Javascriptet vill inte alls ... har du provat med att skicka in det som parameter? Tackar Andreas men jag har nu roblem i javascriptet. Vad kan vara galet? Det verkar som att din xsl inte är rätt. Om du öppnar den i en browser vad ser du då? Kan vara problem med encoding t.ex. Vilken editor kör du? Du bör köra en editor som förstår och kan formattera XML. T.ex. VS Express som är gratis: http://www.microsoft.com/express/ Antar att exemplet du kollar på är från xmlfiles.com och där är det fortfarande IE5 i texten, så undra om det kanske inte är lättare att du letar upp ett nyare och mer uppdaterat exempel. :-) Aha .. körde in den i VS och fick till detta som fungerar. Menar du såhär? Prova att plocka bort '-' tecknet i datumet, tror ev. att inte < och > fungerar om det inte är nummer.större än dagens datum i xsl?
Saken är den att jag i XML filen tänkt ha flera noder som alla har en <datum>-tagg där jag sätter ett datum, tex 2010-05-14.
Jag vill i xsl sedan kolla så att datumet i respektive tagg inte är mindre än dagens datum, dvs att datumet i XML filen inte har varit än.
Går detta att fixa detta med xsl? och om hur...
Tack på förhand
MagnusSv: större än dagens datum i xsl?
Sv:större än dagens datum i xsl?
Det jag vill är att <xsl:if match=".[DATUM>'2010-05-24']"> alltid skall vara dagens datum per automaik
<code>
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<body>
<table border="2" bgcolor="yellow">
<tr>
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="CATALOG/CD" order-by="- DATUM">
<xsl:if match=".[AKTIV='TRUE']">
<xsl:if match=".[DATUM>'2010-05-24']">
<tr>
<td><xsl:value-of select="TITLE"/></td>
<td><xsl:value-of select="TXT"/></td>
</tr>
</xsl:if>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
</code>
compare?Sv: större än dagens datum i xsl?
Funkar din kod alls förresten? Sv:större än dagens datum i xsl?
Självklart fungerar koden ovan.Sv: större än dagens datum i xsl?
<code>
<xsl:variable name="now" select="current-dateTime()"/>
<xsl:if test="DATUM > $now">
</code>
Edit: Ju mer jag kollat på detta desto sämre känns det... någon annan på PS som har en klok lösning?Sv:större än dagens datum i xsl?
XSL
<code>
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:variable name="now" select="current-dateTime()"/>
<xsl:template match="/">
<html>
<body>
<table border="2" bgcolor="yellow">
<tr>
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="CATALOG/CD" order-by="- DATUM">
<xsl:if match=".[AKTIV='TRUE']">
<xsl:if match=".[DATUM>'2010-05-24']">
<tr>
<td><xsl:value-of select="TITLE"/></td>
<td><xsl:value-of select="TXT"/></td>
</tr>
</xsl:if>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet
</code>
XML
<code>
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- Edited by Magnus Karlsson®
-->
<CATALOG>
<CD>
<TITLE>Banan</TITLE>
<TXT>gul</TXT>
<DATUM>2010-01-04</DATUM>
<AKTIV>TRUE</AKTIV>
</CD>
<CD>
<TITLE>Apelsin</TITLE>
<TXT>Orange</TXT>
<DATUM>2010-05-10</DATUM>
<AKTIV>TRUE</AKTIV>
</CD>
<CD>
<TITLE>Citron</TITLE>
<TXT>Gul</TXT>
<DATUM>2007-10-10</DATUM>
<AKTIV>TRUE</AKTIV>
</CD>
</CATALOG>
</code>
JAVASCRIPT
<code>
function aloadXML(id){
// Load XML
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("xxxx.xml")
// Load the XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("xxxx.xsl")
// Transform
document.getElementById(id).innerHTML = xml.transformNode(xsl)
}
</code>Sv: större än dagens datum i xsl?
du kan göra så här i javascriptet lägg till
var xslProc = xslTemp.createProcessor();
xslProc.input = xml;
xslProc.addParameter("datum",getDate());
xslProc.transform;
var dittresultat = xslProc.output
och din xslt så här:
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:param name="datum"/>
<xsl:template match="/">
<html>
<body>
<table border="2" bgcolor="yellow">
<tr>
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="CATALOG/CD" order-by="- DATUM">
<xsl:if match=".[AKTIV='TRUE']">
<xsl:if match=".[DATUM> $datum]">
<tr>
<td><xsl:value-of select="TITLE"/></td>
<td><xsl:value-of select="TXT"/></td>
</tr>
</xsl:if>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet
EDIT: såg att jag fick med din currentdate funktion , den finns inte i xslt 1.0 som du använder tog bort den från xsl delen nuSv:större än dagens datum i xsl?
Meddelande: It is an error to mix objects from different versions of MSXML.
<code>
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("oppet.xml")
// Load the XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("oppet.xsl")
var xslTemp = new ActiveXObject("Msxml2.XSLTemplate.4.0");
xslTemp.stylesheet = xsl;
var xslProc = xslTemp.createProcessor();
xslProc.input = xml;
xslProc.addParameter("datum",'2010-01-01');
xslProc.transform;
// Transform
document.getElementById(id).innerHTML = xslProc.output </code>
Ändrade till :
<code>
var xml = new ActiveXObject("Msxml2.DOMDocument.4.0") // Microsoft.XMLDOM
xml.async = false
xml.load("oppet.xml")
// Load the XSL
var xsl = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0")
xsl.async = false
xsl.load("oppet.xsl")
var xslTemp = new ActiveXObject("Msxml2.XSLTemplate.4.0");
xslTemp.stylesheet = xsl;
var xslProc = xslTemp.createProcessor();
xslProc.input = xml;
xslProc.addParameter("datum",'2010-01-01');
xslProc.transform;
// Transform
document.getElementById(id).innerHTML = xslProc.output
</code>
... men får då felet :
The stylesheet does not contain a document element. The stylesheet may be empty, or it may not be a well-formed XML document.Sv: större än dagens datum i xsl?
Sv: större än dagens datum i xsl?
Sv:större än dagens datum i xsl?
Men. Jag kan inte få till större än och mindre än för min datum kolumn. Ide?
<code>
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="datum"/>
<xsl:template match="/">
<html>
<body>
<table border="2" bgcolor="yellow">
<tr>
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="CATALOG/CD" >
<xsl:if test="AKTIV='TRUE'">
<xsl:if test="DATUM=$datum">
<tr>
<td><xsl:value-of select="TITLE"/></td>
<td><xsl:value-of select="TXT"/></td>
</tr>
</xsl:if>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
</code>Sv: större än dagens datum i xsl?
<code>
<xsl:if test="DATUM > $datum">
<xsl:if test="DATUM < $datum">
</code>Sv:större än dagens datum i xsl?
Har testat med det också men får inga poster som svar.. bara = fungerar och ger ett svar.Sv: större än dagens datum i xsl?
Edit: number(translate('datum_att_testa', '-', ''))