2010-12-15 92 views
0

la question semble un peu confuse, mais c'est en fait simple. Ceci est un suivi de mon post précédent:Une question sur l'échange d'attributs XML dans une balise en Java

Need a little help on this regular expression

après transformation réussie de la chaîne, maintenant la chaîne ressemble:

<media id="pc011018" rights="licensed" 
     type="photo"> 
     <title>Sri Lankans harvest tea</title> 

Maintenant, la seule tâche qui reste est d'échanger les trois attributs de noeud de support, de sorte que la chaîne de sortie doit être:

<media type="photo" id="pc011018" rights="licensed"> 
     <title>Sri Lankans harvest tea</title> 

je pouvais penser à une façon de le faire: tout d'abord, j'extrais la st anneau entouré par la première paire de "[" parenthèse. Ensuite, pour cette chaîne, j'utiliserai un StringTokenizer pour marquer trois chaînes d'attributs: type, id, rights; puis réorganisez-les dans un StringBuffer, retournez-le dans une chaîne, puis enfin concaténer avec la sous-chaîne [title] restante.

Je me demande simplement s'il existe un moyen meilleur et plus efficace que d'utiliser StringToknizer? S'il vous plaît veuillez aider, merci.

+0

Si vous voulez afficher le texte littéral, indentera 4 espaces ou utilisez le bouton 101010 dans l'éditeur. Je l'ai réparé pour vous. –

+4

S'il s'agit d'un fichier XML, l'ordre des attributs ne doit importer pour aucun processeur XML en aval. Pourquoi avez-vous besoin qu'ils soient dans un certain ordre? En outre, il semble que vous ayez vraiment besoin d'utiliser XSLT au lieu de regex pour le faire. –

Répondre

2

Une vraie façon hacky de le faire

String input="<media id=\"pc011018\" rights=\"licensed\" type=\"photo\"><title>Sri Lankans harvest tea</title></media>"; 
    Pattern r= Pattern.compile("<media id=\"(.*)\" rights=\"(.*)\" type=\"(.*)\">(.*)"); 
    Matcher m = r.matcher(input); 
    m.find(); 
    System.out.println("<media type=\""+m.group(3)+ "\" + id=\""+ m.group(1) + "\" rights=\"" + m.group(2) + "\">"+m.group(4)); 

ne fonctionnera que si les données sont toujours que vous décrivez