Bonjour,

Je me retrouve confronté à un problème de "Taille" ! Ou plutôt de poids ... Smiley sweatdrop

Voilà, mon problème se pose sur un site "multisite". Plusieurs noms de domaine pointent donc vers le serveur, et suivant l'url le site affiche des informations différentes ainsi qu'une base qui elle est commune avec les autres sites. La où c'est moins marrant, c'est que toutes les informations sont stockées dans un seul et unique XML et le tout parsé avec DOMdocument.

Tant que le fichier restait sous la barre du 1mo fatidique aucun problème ... mais comme ce site à un backoffice et que le client (ce qui est normal) alimente les différents site, et bien aujourd'hui les compteurs on explosé et le site ne fonctionne plus correctement.

Je n'ai pas développé ce site (encore merci au développeur prétentieux et incompétent Smiley biggol ) et je me retrouve dans une situation plutôt pénible étant donné que rien ne pourra corriger le problème sans une modification en profondeur du site.

J'ai donc fais une recherche sur google et suite à celle-ci je suis tombé sur XMLReader, je voudrais savoir ce que vous en pensez, quelles sont les limites, etc
Si vous avez une autre solution avec DOMdocument....

Où bien je repasse tout dans une vraie base de donnée comme cela aurait du être fait dès le départ. Smiley bawling

Par avance merci Smiley biggrin
Modifié par shmu (25 Mar 2010 - 00:23)
Bonjour,

Est-il possible de fractionner cet unique document xml puis de faire un "fichier racine" qui expédierait vers telle ou telle partie à traiter ?
<?xml version="1.0" encoding="UTF-8"?>
<recensement>
  <sous_domaine id="0" name"bricolage">
    <fichier>http://exemple.com/sous-domaines/bricolage/infos.xml</fichier>
    <description>le site du bicolage</description>
    <utilisateur>Paul Dupond</utilisateur>
  </sous_domaine>
  <sous_domaine id="1" name"aventures">
    <fichier>http://exemple.com/sous-domaines/aventures/infos.xml</fichier>
    <description>le site des aventuriers</description>
    <utilisateur>Emile Victor</utilisateur>
  </sous_domaine>
</recensement>
Pour XMLReader, d'après ce qui est expliqué dans le manuel, j'en ai compris que la lecture stoppait là ou c'était utile. D'après quelques sites ça semble alléger la lecture et aller franchement plus vite.
Bonjour Aureance,

Merci pour ta réponse, malheureusement je ne peux pas scinder le xml du fait que c'est un multisite dynamique !!! Ta solution me paraît sympa mais ingérable pour ma part Smiley decu car tous les éléments sont imbriqués d'une manière digne d'un Linch !

Pour XMLReader, c'est effectivement ce que j'ai pu en lire, mais je me pose des questions quand à son utilisation, écriture et lecture du XML, si il y a des inconvénients lors de son utilisation par rapport au DOMDocument.

En gros avant d'entamer une refonte complète du foutoir laisser par le dev je voulais être sûre de ne pas repartir dans une galère !

Enfin si vous avez une idée !!
Bonjour Shmu.

Je confirme que la solution proposée par Aureance semble être pertinente. DOMDocument, tout comme XMLReader, ont des avantages, et tout bon développeur sait choisir la bonne bibliothèque pour chaque projet. Il est donc complètement faux de choisir arbitrairement de passer tout son projet sous une autre bibliothèque parce qu'on se heurte à un petit problème. En l'occurrence, les données "lourdes" contenues dans le XML peuvent être, soit compressées, soit déportées vers d'autres sources, et le code ne nécessiterait qu'une évolution mineure pour supporter une charge de données bien plus conséquente.

Par ailleurs, il me semble peu légitime d'insulter ainsi votre développeur, alors même que vous ne semblez pas comprendre la source réelle de votre problème. N'est-ce pas là un signe de prétention, comme vous vous plaisez à le dénoncer chez votre collègue ?

Bien cordialement Smiley biggol Smiley biggol Smiley biggol
Bonjour

J'ai un problèm identique avec un fichier qui à l'origine pèse 3Mo sur un serveur qui impose un taille maximale de 200 kO (Bande passante oblige). Pour le résoudre j'utilise la méthode de DTD externes.
Je découpe mon fichier original (3Mo) en autant de sous fichiers qu'il est nécessaire pour respecter une taille de l'ordre de 200 k. (un script PHP écrit pour l'occasion fait cela très bien). Je déclare chaque sous fichier comme une entité externe et le tout est assemblé sur le serveur au moment de la requête à l'aide d'un fichier XML "chapeau" qui tient en quelques lignes.

Le fichier XML d'origine contient près de 150000 lignes. La mise en page est faite par une feuille de styles XSL (qui fait elle-même appel -entre autre- à des feuilles de styles CSS.) Les requêtes sont effectuées par un script js qui transmet les éléments de la requête à la feuille XSL via des paramètres.
Avec cette méthode il est possible de disperser les sous fichiers dans plusieurs répertoires indépendants, voire chez divers hébergeurs, les url permettent d'assembler le tout.
Seul inconvénient de la méthode, elle n'est à ma connaissance supportée que par IE.
Je ne sais pas si cela est bien orthodoxe en tout cas c'est opérationnel.

Si tu veux en savoir plus n'hésites pas à poursuivre la dicussion, à mois que tu ne trouves mieux, mais dans ce cas, je serais heureux de connaître la solution.
J'ai également le meme problème. je genere dynamiquement un fichier xml de 13 mégas.

Les fichiers que je dois trasmettre à un site ne doivent pas excéder le poids de 7méga.

Comment faire ça en php. Il semblerait que tu es la réponse rimousky.

Merci d'avance

rimousky a écrit :
Bonjour

J'ai un problèm identique avec un fichier qui à l'origine pèse 3Mo sur un serveur qui impose un taille maximale de 200 kO (Bande passante oblige). Pour le résoudre j'utilise la méthode de DTD externes.
Je découpe mon fichier original (3Mo) en autant de sous fichiers qu'il est nécessaire pour respecter une taille de l'ordre de 200 k. (un script PHP écrit pour l'occasion fait cela très bien). Je déclare chaque sous fichier comme une entité externe et le tout est assemblé sur le serveur au moment de la requête à l'aide d'un fichier XML "chapeau" qui tient en quelques lignes.

Le fichier XML d'origine contient près de 150000 lignes. La mise en page est faite par une feuille de styles XSL (qui fait elle-même appel -entre autre- à des feuilles de styles CSS.) Les requêtes sont effectuées par un script js qui transmet les éléments de la requête à la feuille XSL via des paramètres.
Avec cette méthode il est possible de disperser les sous fichiers dans plusieurs répertoires indépendants, voire chez divers hébergeurs, les url permettent d'assembler le tout.
Seul inconvénient de la méthode, elle n'est à ma connaissance supportée que par IE.
Je ne sais pas si cela est bien orthodoxe en tout cas c'est opérationnel.

Si tu veux en savoir plus n'hésites pas à poursuivre la dicussion, à mois que tu ne trouves mieux, mais dans ce cas, je serais heureux de connaître la solution.
Bonjour

Méthode de découpe et d'exploitation d'un fichier XML volumineux

Principe : Méthode des DTD externes (non supportée par Firefox)

Créer les fichiers suivants :

-fusion.xml
Extraits :

<?xml version='1.0' encoding='ISO-8859-1'?>
<?xml-stylesheet type='text/xsl' href='Stylesheet.xsl'?>
<!DOCTYPE  fichiers SYSTEM  'DTD.dtd'>
<fichiers>
&fichier_i;


- DTD.dtd[i]

[b]Extraits :
(autant de lignes que de sous fichiers
[code]
........
<!ENTITY fichier_i SYSTEM 'fichier_i.xml'>

........
[code]


-Le script php lit le fichier source.xml ligne à ligne et aiguille chaque ligne au fur et à mesure dans les sous fichiers fichier_i.xml


Php peut automatiser l'ensemble ou une partie du processus.
Si la tâche n'est pas répétitive, il suffit d'utiliser le script pour découper le fichier source, à la limite le travail peut être fait une fois pour toute à la main, s'il doit être répété autant l'automatiser (c'est mon cas).
[/i][/i]
Bonjour,

je dois traiter un fichier XML de 150000 lignes, et pour que mon programme fonctionne, je vois qu'il faut que je découpe ce fichier XML en au moins 3 parties.
Donc, ta solution, rimousky, m'intéresse grandement car c'est une tache répétitive à effectuer tous les jours, mais malheureusement je n'arrive pas à lire ta solution, les liens images de ton message sont brisés...

Je te remercie d'avance si qq pouvait poster ta solution de nouveau...ou au moins une piste!
Merci merci merci
Bonjour à vous,

Désolé d'avoir mis tant de temps à revenir sur ce forum, j'ail un emploie du temps plutôt chargé ! Du coup j'ai du mettre de côté de le problème.

Je suis de nouveau dessus !

Pour ce qui est du fichier volumineux, j'ai finalement utiliser la fonction document() qui permet d'inclure un xml externe.


<xsl:variable name="variable" select="document('votre xml.xml')"/>


qui peut être récupéré de la sorte


<xsl:apply-templates select="$variable//noeud/noeud[@id]" />


C'est très pratique !

Mais la limite se pose quand il y a un xsl:key en top : /


<xsl:key name="variable" match="//noeud[@id=$id]/noeudF/" use="text()" />


Surtout lorsque TOUT repose sur cette ligne et que celle-ci fait appel au fichier xml externe en question. Car impossible de passer une variable dans match qui est une pattern.

Pour le xml volumineux (qui ne s'applique pas dans mon cas) voir http://bob.developpez.com/phpxslt/ici Smiley url

<?php
$xh = xslt_create();

$file=fopen("cours.xml","r");
$xml=fread($file,16384);
fclose($file);

$file=fopen("index.xsl","r");
$xsl=fread($file,16384);
fclose($file);

$arguments = array(
  '/_xml' => $xml,
  '/_xsl' => $xsl
  );

$result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);

xslt_free($xh);

print "$result";
?>


Avez-vous une solution pour charger un xml avant xsl:key ou une alternative ?
Peut être xsl:fore-each ?

Et je confirme le site que je dois réparer est ni fait ni à faire !!!
Salut

Je reviens sur le forum que j'avais déserté depuis quelques mois.

Si cela intéresse du monde je peux débaler ma méthode de DTD externe, valable avec IE6-7-8, je me remet à la cherche d'une solution pratique avec FF, (peut-être utiliser les DTD internes, mais c'est à à vérifier)


J'avais aussi indiqué que j'utilisais PHP pour reconstituer un fichier xml unique à partir de plusieurs composants xml éparpillés.

Cordialement à tous