2017-10-21 52 views
1

J'ai une URL XML 1. Ma sortie doit être quelque chose commeCompter les éléments dans les données dans une URL XML en utilisant XSL et imprimer en html

  • 2009-12-01: 2
  • 2009-12-02: 2

Je suis en train de réaliser cela en utilisant XSL (ce qui est mon premier le temps de l'utiliser, donc mon code peut sembler vraiment stupide).

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
    <html> 
    <body> 
    <xsl:copy-of select="document('http://vhost11.lnu.se:20090/final/getFilterData.php?parameter=User_IDpatient&value=3')/EData/test_sessionID"/> 
    2009-12-01 : <xsl:value-of select="count(EData/test_sessionID[test_datetime=2009-12-01 18:00:00])" /> 
    2009-12-02 : <xsl:value-of select="count(EData/test_sessionID[test_datetime=2009-12-02 18:00:00])" /> 
</body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

Même si ce code fonctionne, il y a quelques problèmes comme la date et l'heure est fusionné. Idéalement, le comptage doit être effectué uniquement sur la partie date de l'élément test_datetime. L'autre est comment obtenir la date automatiquement au lieu de l'écrire manuellement. J'utilise node.js comme mon serveur. Je ne reçois aucune erreur dans la console ou dans les outils de développement de Chrome. Donc, un peu perdu sur la façon de procéder.

Répondre

0

vous pouvez utiliser camaro pour cette

const transform = require('camaro') 
const rp = require('request-promise') 

rp('http://vhost11.lnu.se:20090/final/getFilterData.php?parameter=User_IDpatient&value=3') 
    .then(xml => { 
     return transform(xml, { 
      '2009-12-01': 'count(//test_datetime[text() = "2009-12-01 18:00:00"])', 
      '2009-12-02': 'count(//test_datetime[text() = "2009-12-02 18:00:00"])' 
     }) 
    }) 
    .then(console.log) 

Sortie

{ '2009-12-01': 2, '2009-12-02': 2 } 

Si vous voulez capturer automatiquement la date sans spécifier manuellement, vous pouvez le faire

const transform = require('camaro') 
const rp = require('request-promise') 
const _ = require('lodash') 

rp('http://vhost11.lnu.se:20090/final/getFilterData.php?parameter=User_IDpatient&value=3') 
    .then(xml => { 
     return transform(xml, { 
      data: ['//test_datetime', { 
       value: './text()' 
      }] 
     }) 
    }) 
    .then(json => _.groupBy(json.data, 'value')) 
    .then(grps => _.mapValues(grps, 'length')) 
    .then(console.log) 

sortie

{ '2009-12-01 18:00:00': 2, '2009-12-02 18:00:00': 2 } 
+0

Bonjour Tuan, C'est très intéressant. Mais j'ai besoin d'afficher ces données dans un code HTML. Comment je fais ça? Dois-je utiliser app.get pour envoyer ces données au serveur frontal? N'est-il pas préférable de le faire directement du côté client? –

+0

vous pouvez transmettre les données n'importe où. c'est juste un objet js. –