2009-06-25 7 views
0

J'ai un programme Lua qui consomme des données provenant d'un périphérique externe. Le dispositif retourne XML malformé qui ressemble à:Correction d'un code XML incorrect dans Lua

<element attribute1="value1" attribute2="value2" attribute3=" m "value3" " attribute4="value4" /> 

En particulier certains champs sont modifiables par l'utilisateur et peut concevables contenir des éléments qui doivent être protégés, mais ne sont pas. J'espère que le code générera ces messages, mais d'ici là, j'ai besoin d'une solution de contournement pour essayer de faire ce qu'il faut. Les messages ne semblent venir dans un format fixe avec des attributs toujours dans le même ordre et toujours présent (pour autant que je peux dire) pour que je puisse utiliser une correspondance de motif très restrictif comme:

string.match(str, 'attribute1="(.*)" attribute2="(.*)" attribute3="(.*)" attribute4="(.*)") 

mais cela semble vraiment icky et va bien sûr casser si elles décident de changer le format (sans résoudre le problème)

Des suggestions pour des solutions alternatives? Je suis principalement préoccupé par trouver "qui doivent être transformés en &" s. D'autres entités XML ne m'inquiètent pas autant:

Répondre

3

Malheureusement, si XML est mal formé, Vous ne pouvez pas trouver quelque chose qui fonctionnera dans tous les cas.

Ce que je ferais, c'est, d'abord, essayer de l'analyser comme XML normal. Si cela échoue, revenez à votre méthode regex. De cette façon, lorsque le producteur de ce fichier XML sera corrigé, votre code commencera automatiquement à faire les bons choix.

+0

Je pense que pour ma situation, je ferais mieux de faire d'abord l'expression régulière, puis de retomber en cas d'échec (et de cracher un avertissement à cet effet). Je ne fais que transférer sur le XML, ne le consommant pas, donc je veux juste le rendre agréable pour le code qui le consomme par la suite. – Dolphin