J'ai un fichier xml avec le contenu du fichier xml simplifiée suivante:.Net, XML et Regex - Comment faire correspondre un élément de collection spécifique?
<CollectionItems>
<CollectionItem>
<Element1>Value1</Element1>
<Element2>
<SubElement1>SubValue1</SubElement1>
<SubElement2>SubValue2</SubElement2>
<SubElement3>SubValue3</SubElement3>
</Element2>
<Element3>Value3</Element3>
</CollectionItem>
<CollectionItem>
<Element1>Value1</Element1>
<Element2>
<SubElement1>SubValue1</SubElement1>
<SubElement2 />
<SubElement3>SubValue3</SubElement3>
</Element2>
<Element3>Value3</Element3>
</CollectionItem>
<CollectionItem>
<Element1>Value1</Element1>
<Element2>
<SubElement1>SubValue1</SubElement1>
<SubElement2>SubValue2</SubElement2>
<SubElement3>SubValue3</SubElement3>
</Element2>
<Element3>Value3</Element3>
</CollectionItem>
</CollectionItems>
Je cherche à écrire un regex en .Net qui correspond à tout collectionItem où SubElement2 est vide (au milieu collectionItem dans cet exemple).
I ont l'expression rationnelle suivant la mesure (mode SingleLine activé):
<CollectionItem>.+?<SubElement2 />.+?</CollectionItem>
Le problème est qu'il est correspondant à l'ouverture de la première collectionItem par la fin de la deuxième collectionItem. Je comprends pourquoi c'est le cas, mais je ne sais pas comment modifier l'expression rationnelle pour qu'elle corresponde uniquement au centre CollectionItem.
Edit: Quant à savoir pourquoi regex par opposition à quelque chose d'autre:
- je tentais de modifier le fichier dans un éditeur de texte pour la simplicité.
- Après que je ne pouvais pas comprendre comment le faire dans regex, je voulais savoir si cela pourrait se faire (et comment) dans l'intérêt de l'apprentissage.
Merci!
votre xml est mauvais dans l'exemple. SubElement2 et SubElement3 ont toutes deux des balises fermantes SubElement1 – Greg
Oups, vous avez raison. C'est corrigé maintenant. –