2009-07-27 8 views
0

Quel est le moyen le plus rapide d'ajouter un attribut à l'élément racine d'un fichier XML massif? Ces fichiers sont trop volumineux pour être lus en mémoire et j'aimerais éviter autant que possible une pénalité d'E/S.Le moyen le plus efficace d'ajouter un attribut au début du fichier XML massif en Java?

+0

est-ce un att nouvellement défini ou défini comme optionnel mais non peuplé att? – akf

+0

Nouvel attribut défini - plus précisément, l'attribut d'espace de noms de sorte que JAXB puisse démarsaliser l'objet. – Brian

+0

Faites attention à traiter les déclarations d'espace de noms en tant qu'attributs. Les analyseurs leur accordent un traitement spécial et ne peuvent pas exposer ces informations à l'API en tant qu'attributs. – skaffman

Répondre

5

N'allez-vous pas devoir réécrire le fichier entier de toute façon si vous insérez du texte au début ou près du début? Un analyseur SAX devrait être adaptable à l'entrée de tampon (via un InputStream) si vous ne voulez pas tout en mémoire à la fois.

Vous aurez toujours le coup de réécrire le fichier entier mais pas le coup de mémoire de l'avoir en mémoire à la fois. Fondamentalement, vous allez analyser le fichier, écouter les événements SAX et écrire le nouveau fichier à partir de ces événements. Votre analyseur syntaxique SAX écoutera également les circonstances appropriées pour ajouter un attribut.

+0

Excellente réponse :) –

0

Il est pratiquement impossible de ne pas réécrire le fichier en Java (je ne pense même pas que vous pourriez le faire si vous étiez en train de peaufiner les fichiers au niveau du système, mais peut-être ...) moyen le plus efficace pour réécrire le fichier?

Si possible, j'éviterais tous les parseurs XML et j'écrirais les miens. Cela nécessiterait que vous puissiez facilement identifier l'emplacement du nouveau fichier dans le fichier. Si vous pouvez trouver la chaîne correspondant, vous pouvez lire un peu à la fois, rechercher le point d'insertion et insérer simplement vos données supplémentaires lorsque vous y arrivez, puis continuer à copier le reste.

Questions connexes