C# Regular Expressions Frage

OnkelHomie

Grünschnabel
C# Regular Expressions bzw. XML Serializer Frage

Hallo zusammen,

ich stehe gerade vor einem Problem und komme nicht so ganz weiter bzw. weiß nicht wo der Fehler liegt.

Ich habe einen längeren String in dem folgende Zeichenfolge vorkommen kann:  oder auch , wobei die Ziffern- bzw. Buchstabenfolge ein Hexcode ist der halt von 00 bis ff gehen kann. Es handelt sich dabei im eine XML Datei in der sich ASCII Zeichen befinden die aber falsch interpretiert werden. Beim Einlesen der Datei muss nun eben diese Zeichenfolge herausgefilter werden.

Ich habe mir da schon etwas zusammengebastelt, was laut eines RegEx Editors passend seien sollte:

Code:
bezeichnung = Regex.Replace(bezeichnung, @"&#x[0-9?a-f]+;", "");

oder auch:
Code:
bezeichnung = Regex.Replace(bezeichnung, @"&#x\w+;", "");

Im RegEx Designer funktioniert dies auch tadellos, nur in C# leider nicht.

Ich wäre sehr dankbar wenn mir vielleicht jemand einen Hinweis geben könnte wo der Fehler liegt.
 
Zuletzt bearbeitet:
Wie äußert es sich denn das es nicht funktioniert?
Habs jetzt extra nochmal laufen lassen und bei mir funktioniert es.

Ev. müsstest du doch mehr Code preisgeben, vielleicht hast du ja auch was bei der Rückgabe des String übersehen.
 
Hallo und danke für die Antwort.

Es äußert sich darin, dass die Datei nicht importiert werden kann stehts der Fehler kommt das ein irreguläres Zeichen gefunden wurde.

Ich debugge jetzt schon eine Zeit lang und denke auch der Fehler liegt schon im Stream vorher.

Bin noch recht neu in der ganzen Geschichte und auch in dem Projekt, daher fällt es etwas schwer da durchzublicken :)

Mehr vom Code hier reinzustellen ist leider so nicht möglich da es sehr umfangreich ist und ich eben selber noch dabei bin den Code zu zerpflücken/zu verstehen.

Ich dachte halt der Fehler liegt an der Stelle, da dort eben etwas aus der XML Datei einem Objekt zugeordnet wird. Aber es sieht wohl so aus das halt schon das Einlesen des Streams mit dem nicht interpretierbaren Zeichen zum Problem führt.

Kann man ggf. RegEx auch auf einem FileStream anwenden?

Mein Problem liegt allerdings auch in der Performance, denn es handelt sich bei den Beispiel schon um eine XML Datei mit ~150.000 Zeilen, in der halt im Tag "Bezeichnung" die Problem-Zeichenfolge vorkommen kann. Auf das Erzeugen der Datei habe ich leider keinen Einfluss, sonst würde ich es da schon abfangen. So muss es eben beim einlesen der Datei passieren und möglichst einfach/performant sein.

edit:
Der Fehler sieht übrigens z.B. wie folgt aus (nur jew. mit einem anderen Zeichen):
Code:
System.InvalidOperationException: Fehler im XML-Dokument (867,22). ---> System.Xml.XmlException: '', hexidezimaler Wert 0x14, ist ein ungültiges Zeichen. Zeile 867, Position 22.
   bei System.Xml.XmlTextReaderImpl.Throw(Exception e)
   bei System.Xml.XmlTextReaderImpl.Throw(String res, String[] args)
   bei System.Xml.XmlTextReaderImpl.ThrowInvalidChar(Int32 pos, Char invChar)
   bei System.Xml.XmlTextReaderImpl.ParseNumericCharRefInline(Int32 startPos, Boolean expand, BufferBuilder internalSubsetBuilder, Int32& charCount, EntityType& entityType)
   bei System.Xml.XmlTextReaderImpl.ParseCharRefInline(Int32 startPos, Int32& charCount, EntityType& entityType)
   bei System.Xml.XmlTextReaderImpl.ParseText(Int32& startPos, Int32& endPos, Int32& outOrChars)
   bei System.Xml.XmlTextReaderImpl.ParseText()
   bei System.Xml.XmlTextReaderImpl.ParseElementContent()
   bei System.Xml.XmlTextReaderImpl.Read()
   bei System.Xml.XmlTextReader.Read()
   bei System.Xml.XmlReader.ReadElementString()
...
 
Zuletzt bearbeitet:
Du könntest die Datei mit dem StreamReader Zeilenweise einlesen und spiel eventuell mal mit den Encodings Typen rum die du da angeben kannst.
Oder schau mal in der Xml selber dort müsst der Encoding Typ glaube angegeben sein.

Wollte jetzt grade alternativ XmlDocument vorschlagen, aber ich glaube den verwendest du da schon oder?
 
Korrekt XmlDocument wird verwendet.

Mit den Encodings habe ich auch schon mal was getestet, also einfach mal testweise versch. in der Datei eingefügt, leider ohne Erfolg.

Mit dem StreamReader muss ich mich dann nochmal etwas auseinandersetzen.
 
Zurück