2010-06-01 7 views
0

J'ai cet énorme fichier xml (13 mb) et il a quelques valeurs malformées. Voici un exemple du xml:Regex pour ajouter CDATA pour XML mal formé

<propertylist> 
     <adprop index="0" proptype="type" value="Ft"/> 
     <adprop index="0" proptype="category" value="Bs"/> 
     <adprop index="0" proptype="subcategory" value="Bsm"/> 
     <adprop index="0" proptype="description" value="MOONEN CUSTOM 58"/> 
</propertylist> 

Maintenant c'est ok. Mais j'ai beaucoup d'autres noeuds qui ne sont pas encapsulés dans CDATA qui doivent l'être. Le nœud qui me donne des problèmes est le

<adprop index="0" proptype="description" value=""/> 

J'ai créé cette expression régulière:

<adprop index="0" proptype="description" value="(.+)"\/> 

pour attraper ce nœud et le remplacer par ceci:

<adprop index="0" proptype="description" value="<![CDATA[\1]]>"\/> 

Je lance cela dans notepad ++ et ça marche.

Le seul problème est lorsque la valeur = « » est multi doublé comme:

<adprop index="0" proptype="description" value="cutter that has demonstrated her offshore capabiliti from there to the Canaries with her current owner. 

Spacious homely interior with over 2m headroom and heaps of" /> 

Il échoue avec celui-ci, et il y a beaucoup comme celui-ci.

Quelqu'un peut-il m'aider dans l'expression régulière afin que je puisse attraper la valeur quand il est multi-ligné?

Merci

+0

CDATA à l'intérieur d'une valeur d'attribut n'est pas légal XML. Qu'est-ce qui vous fait penser que vous voulez une section CDATA là-bas? –

+0

Alors comment puis-je échapper aux valeurs? – AntonioCS

Répondre

0

Essayez d'ajouter \r ou \n à votre expression régulière pour inclure les nouvelles lignes comme le caractère point correspond à « tout caractère sauf » nouvelles lignes. Je ne suis pas sûr de la syntaxe de l'expression régulière Notepad ++, mais elle devrait l'indiquer dans l'aide. (L'éditeur que j'utilise, UltraEdit, autorisera les nouvelles lignes dans son moteur regex.)

+0

J'ai essayé d'utiliser \ n mais il ne correspond toujours pas. J'ai placé la chaîne dans l'éditeur de regex et il ne correspond que quand il s'agit d'une seule ligne :( – AntonioCS