2009-04-29 7 views
2

J'utilise le msxml pour analyser un fichier xml. La langue est C++. Le fichier xml contient des dates et des heures utilisant le format xsd: dateTime (Quelque chose comme ça: 2009-04-29T12: 00: 00Z)Comment lire un xsd: dateTime avec msxml?

Y at-il un moyen facile de convertir xsd: dateTime à quelque chose comme SYSTEMTIME, FILETIME ou VariantTime?

Répondre

1

Peut-être que cela vous aide: Using strptime to parse ISO 8601 formated timestamps sur ioncannon.net.

+0

Merci pour votre réponse. strptime est une fonction assez intéressante, mais elle n'est pas disponible sur Windows ... J'ai vu sur internet quelques implémentations de strptime sous licence bsd, mais je pense qu'il faudrait assez de travail jusqu'à ce qu'il se compile sous Windows ... – Name

+0

un tir dans le noir, vraiment. Je suis désolé. : - \ – Tomalak

+0

C'est toujours une bonne réponse. Cela pourrait aider quelqu'un à chercher la même chose sur unix. Et il me donne de nouvelles directions de recherche pour trouver une solution sur les fenêtres. – Name

0

Vous pouvez utiliser un javascript:

<xsl:transform 
id="integra-transformer" 
version="1.0" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:date="urn:date-scripts"> 

<xsl:output method="xml" indent="yes" /> 

<msxsl:script 
    implements-prefix="date" 
    language="javascript"> 
    <![CDATA[ 
    Date.prototype.toISO8601ShortString = function() { 
     var zeropad = function (num) { return ((num < 10) ? '0' : '') + num; } 
     var str = ""; 
     var date = new Date(); 
     str += date.getUTCFullYear(); 
     str += "-" + zeropad(date.getUTCMonth() + 1); 
     str += "-" + zeropad(date.getUTCDate()); 
     str += "T" + zeropad(date.getUTCHours()) + 
     ":" + zeropad(date.getUTCMinutes()); 
     return str; 
    } 

    function getToday() 
    { 
     var d; 
     d = new Date(); 
     return(d.toISO8601ShortString()); 
    } 
    ]]> 
</msxsl:script> 


<xsl:template match="/"> 
     <date> 
      <xsl:value-of select="date:getToday()"/> 
     </date> 
    </xsl:template> 
</xsl:transform> 

Ne pas oublier d'activer les scripts befor vous la transformation:

xslDom.setProperty("AllowXsltScript", true) 
+0

Merci pour votre réponse, mais pour autant que je comprends votre script est de convertir une date en xsd: dateTime et non de xsd: dateTime. Le problème de la conversion de "from xsd: dateTime" est que xsd: dateTime autorise beaucoup de syntaxes différentes (par exemple un numéro de semaine au lieu d'une date, ...) – Name