2011-06-01 4 views
0

J'ai créé mon propre fichier XML sur mon téléphone Android, qui ressemble à ceJava remplacer en fichier XML

<?xml version="1.0" encoding="utf-8" ?> 
<backlogs> 
    <issue id="1"> 
     <backlog id="0" name="Linux" swid="100" /> 
     <backlog id="0" name="Project Management" swid="101" /> 
    </issue> 
    <issue id="2"> 
     <backlog id="0" name="Tests" swid="110" /> 
     <backlog id="0" name="Online test" swid="111" /> 
     <backlog id="0" name="Test build" swid="112" /> 
     <backlog id="0" name="Update" swid="113" /> 
    </issue> 
</backlogs> 

J'ai ensuite converti en une chaîne pour remplacer l'intérieur de la chaîne en utilisant des expressions régulières , mais j'ai un problème avec l'expression régulière.
L'expression régulière Je viens de créer se présente comme suit

([\n\r]*)<(.*)issue(.*)1(.*)([\n\r]*)(.*)([\n\r]*)(.*)([\n\r]*)(.*)<(.*)/(.*)issue(.*) 

Je dois remplacer la spécifique question-tag (situé à l'ID spécifique) avec une autre question-tag dans une autre chaîne
L'expression régulière fonctionne très bien pour la tag avec ID 1, mais pas avec ID 2 car il y a une autre quantité de tags, mais est-il possible de contourner l'utilisation du montant?

J'espère que vous comprenez ma question

J'ai finalement trouvé une solution pour ma question, qui est

([\n\r]*)<(.*)issue(.*)1[\S\s]*?<(.*)/(.*)issue(.*) 
+2

Pour la cinquième fois, ** n'utilisez pas une regex pour travailler avec des langages non-réguliers. ** Utilisez un ** analyseur **. –

+0

Avez-vous pensé à l'analyser dans un objet Document XML en faisant vos changements comme ça à la place en utilisant des regex et des chaînes? –

+1

mmm, peut-être XSLT pourrait vous aider? – ignis

Répondre

0

Utilisez un SAX (ou Stax) analyseur et écrivain en même temps. Lorsque vous lisez un événement, déterminez si vous voulez écrire le même type d'événement pour le rédacteur sans modification, ou si vous voulez modifier l'état dans lequel vous vous trouvez, comme le changement d'un nom d'élément ou d'une valeur d'attribut. Cela gérera une quantité illimitée d'éléments au détriment de l'utilisation du processeur; en général, il sera assez léger.

3

Ne pas utiliser regex. S'il vous plaît. Utilisez l'analyseur XML.

Savez-vous ce qui est le plus voté SO answer

+0

Comment puis-je utiliser l'analyseur XML pour le remplacer? – The87Boy

+0

analyser le xml. faire des changements de mémoire. puis réécrire si vous voulez –

+0

5.000 objets est beaucoup, donc je ne pense pas que la mémoire de l'Android peut gérer cela – The87Boy