2009-06-25 11 views
0

Ich habe ein Lua-Programm, das Daten von einem externen Gerät verbraucht. Das Gerät kehrt fehlerhafte XML, das wie folgt aussieht:Beheben von schlechtem XML in Lua

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

Insbesondere einige der Felder sind vom Benutzer bearbeitet werden und Elemente enthalten denkbar könnten, die maskiert werden sollen, aber nicht sind. Hoffentlich kann ich den Code, der diese Nachrichten erzeugt, reparieren lassen, aber bis dahin brauche ich einen Workaround, um zu versuchen, das Richtige zu tun. Die Nachrichten scheinen in einem festen Format mit Attributen immer in der gleichen Reihenfolge und immer vorhanden ist (soweit ich das beurteilen kann) zu kommen, so konnte ich ein sehr restriktiven Muster Spiel wie verwenden:

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

aber dies scheint wirklich icky und wird natürlich brechen, wenn sie sich entscheiden, das Format zu ändern (ohne das Problem zu beheben.

Irgendwelche Vorschläge für alternative Lösungen? Ich bin hauptsächlich besorgt über die Suche nach "'s, die in & umgewandelt werden müssen;' s. Andere XML-Entitäten, um die ich mich nicht so sehr sorge.

Antwort

3

Leider, wenn XML so fehlerhaft ist, y Man kann sich nicht etwas einfallen lassen, das in jedem Fall funktionieren wird.

Was ich tun würde, ist zunächst, zu versuchen, es als normale XML zu analysieren. Wenn das fehlschlägt, greifen Sie auf Ihre Regex-Methode zurück. Wenn der Hersteller dieses XML-Codes repariert wird, beginnt der Code automatisch, das Richtige zu tun.

+0

Ich denke, für meine Situation werde ich besser dran sein, wenn ich zuerst die Regex mache und dann zurückfalle, wenn es scheitert (und eine Warnung ausspreche). Ich führe nur das XML weiter, verwende es nicht, also möchte ich es nur für den Code interessant machen, der es später tatsächlich nutzt. – Dolphin