Comment puis-je couper un gros fichier xml?
Nous l'exportation “des dossiers” dans un fichier xml; un de nos clients se sont plaints que le fichier est trop grand pour leur autre système de processus. Donc j'ai besoin de diviser le fichier, tout en répétant la “section d'en-tête” dans chacun des nouveaux fichiers.
Donc je suis à la recherche de quelque chose qui me permettra de définir des requêtes xpath pour la ou les section(s) qui doivent toujours être délivrée, et un autre xpath pour les “lignes” avec un paramètre qui indique le nombre de lignes à mettre dans chaque fichier et comment nommer les fichiers.
Avant que je commence à écrire quelques personnalisé .net code pour ce faire; est-il un standard de l'outil de ligne de commande qui fonctionne sur windows qui fait?
(Que je sais comment programmer en C#, je suis plus à écrire du code, puis d'essayer de se soucier du complexe xsl etc, mais une "du soi" la solution serait de mieux que de code personnalisé.)
- Je ne sais pas d'un outil de ligne de commande conçu pour cela. Vous pourriez être en mesure d'utiliser XSLT. Cependant, lorsque j'ai eu quelque chose de similaire, j'ai écrit un personnalisé programme en Python, comme Python a été mon plus confortables langue (et je n'avais pas utilisé XSLT dans années).
Vous devez vous connecter pour publier un commentaire.
"est-il un standard de l'outil de ligne de commande qui fonctionne sur windows qui est-il?"
Oui. http://xponentsoftware.com/xmlSplit.aspx
Il n'y a pas de solution à cela, car il ya tellement de différentes manières possibles que votre source XML pourrait être structuré.
Il est relativement simple de construire une transformation XSLT qui produira une tranche d'un document XML. Par exemple, étant donné ce XML:
vous pouvez produire une copie du fichier contenant uniquement
data
éléments à l'intérieur d'une certaine plage avec ce XSLT:(Remarque, en passant, que, parce qu'il est basé sur l'identité de transformation, elle fonctionne même si
header
n'est pas l'élément de niveau supérieur.)Vous avez encore besoin de compter les
data
éléments dans la source XML, et exécuter la transformation à plusieurs reprises avec les valeurs de$startPosition
et$endPosition
qui sont adaptés à la situation.D'abord télécharger foxe éditeur xml à partir de ce lien http://www.firstobject.com/foxe242.zip
Voir cette vidéo, http://www.firstobject.com/xml-splitter-script-video.htm
La vidéo explique comment split code fonctionne.
Il y a un code de script sur cette page (qui commence par
split()
) copiez le code et l'éditeur xml programme de faire un "Nouveau Programme" sous le menu "Fichier". Coller le code et de l'enregistrer. Le code est:Changer le gras (ou * * * marqués d'un*) champs à vos besoins. (c'est également exprimée à la page de la vidéo)
Sur le xml fenêtre de l'éditeur de faire un clic droit et cliquez sur EXÉCUTER (ou simplement F9). Il est de sortie bar sur la fenêtre où il indique le nombre de fichiers générés.
Note:
nom du Fichier d'entrée peut être
"C:\\Users\\AUser\\Desktop\\a_xml_file.xml"
(double slash)et du fichier de sortie
"C:\\Users\\AUser\\Desktop\\anoutputfolder\\piece" + nFileCount + ".xml"
Comme déjà mentionné, la
xml_split
de l'Perl package XML::Twig fait un excellent travail.Utilisation
Sans arguments
xml_split
crée un fichier par haut-niveau nœud enfant.Il y a paramètres pour spécifier le nombre d'éléments que vous souhaitez par fichier (
-g
) ou de la taille approximative (-s <Kb|Mb|Gb>
).Installation
Windows
Regardez ici
Linux
sudo apt-get install xml-twig-tools
xml_split - split énorme de documents XML en petits morceaux
http://www.perlmonks.org/index.pl?node_id=429707
http://metacpan.org/pod/XML::Twig
Il n'y a rien de construit dans qui peut gérer cette situation facilement.
Votre approche semble raisonnable, mais je serais probablement commencer avec un "squelette" d'un document contenant les éléments qui doivent être répétées et de générer plusieurs documents avec les "enregistrements".
Mise à jour:
Après un peu de creuser, j'ai trouvé cette article décrivant une façon de diviser les fichiers à l'aide de XSLT.
Utiliser Ultraedit basé sur https://www.ultraedit.com/forums/viewtopic.php?f=52&t=6704
Tous, j'ai ajouté a un peu de XML en-tête et pied de page bits
Le premier et le dernier fichier doit être corrigé manuellement (ou supprimer l'élément racine de votre source).