Spielen Sie andere Codewerte als XML-gültige Zeichen in Java ab

Einführung

Früher habe ich XML bei der Arbeit importiert, aber zu diesem Zeitpunkt hat die andere Partei den Steuercode geladen.

Die folgende Methode wurde zum Importieren verwendet.

Unmarshaller#unmarshal(XMLStreamReader reader, Class declaredType)

Der Ablauf besteht darin, den Inhalt von XML als Zeichenfolge abzurufen. ⇒ In einen Stream konvertieren. ⇒ Als Objekt erstellen.

Und ich bekomme folgenden Fehler.

Nachricht: Im Elementinhalt des Dokuments wurde ein ungültiges XML-Zeichen (Unicode: 0x2) gefunden.

Es scheint also, dass die andere Partei das Problem nicht beheben wird. Daher habe ich beschlossen, ungültige XML-Zeichen durch Ersetzen von Zeichenfolgen zu entfernen.

Zeichenketten, die in XML verwendet werden können

W3C-Empfehlungsdokument

Gemäß der obigen Site sind die Codewerte von Zeichen, die in XML verwendet werden können, die folgenden 6 Muster.

① # x9 ⇒ Registerkarte ② #xA ⇒ Zeilenumbruch (LF) ③ #xD ⇒ Zeilenumbruch (CR) ④ [# x20- # xD7FF] ⇒ Raum-Hangul halber Breite ⑤ [# xE000- # xFFFD] ⇒ Externe Zeichen - Sonderzeichen ⑥ [# x10000- # x10FFFF] ⇒ Zeilenzeichen B Silbe Zeichen undefiniert

Grundsätzlich sollten Sie denken, dass die von Ihnen verwendeten Zeichen in ④ sind

Fügen Sie vorerst eine Tabelle mit Zeichen und Codewerten in Unicode ein

Unicode-Liste

Darstellung in Java

Schreiben Sie beim Ersetzen durch Angabe eines Codewerts in Java wie folgt. Leerzeichen mit halber Breite werden im Folgenden durch Leerzeichen ersetzt. Sie können Matcher oder etwas anderes verwenden, aber vorerst können Sie reguläre Ausdrücke mit String # replaceAll verwenden.

python


String str = "XML-String-Version";
str = str.replaceAll("\\u0020", "");

In Java können Sie einen zweistelligen Zeichencode mit "\ x00" und einen vierstelligen Zeichencode mit "\ u0000" schreiben. Escape hat zwei Rückschläge.

Wenn Sie alles in 4 Ziffern schreiben, wird es so sein ① #x9 ⇒ "\u0009" ② #xA ⇒ "\u000A" ③ #xD ⇒ "\u000D" ④ [#x20-#xD7FF] ⇒ "[\u0020-\uD7FF]" ⑤ [#xE000-#xFFFD] ⇒ "[\uE000-\uFFFD]"

Warten Sie ... Unicode enthält mehr als 5 Ziffern ... Ich habe mich gefragt, wie ich es ausdrücken soll. Es gab eine Möglichkeit, einen mehrstelligen Codewert mit einem regulären Ausdruck anzugeben.

⑥ [#x10000-#x10FFFF] ⇒ "[\x{10000}-\x{10FFFF}]"

Das scheint in Ordnung zu sein.

Kombinieren und ablehnen

Reguläre Ausdrücke können ODER-beurteilt werden. Kleben Sie sie also mit einer Pfeife zusammen und lehnen Sie sie alle ab.

python


String str = "XML-String-Version";
str = str.replaceAll("(?!\\u0009|\\u000A|\\u000D|[\\u0020-\\uD7FF]|[\\uE000-\\uFFFD]|[\\x{10000}-\\x{10FFFF}]).", "");

Damit konnte ich nach dem Entfernen der Zeichen, die nicht verwendet werden konnten, importieren. Ich habe mir Sorgen gemacht, weil es nicht reagiert, es sei denn, ich schreibe ein "." (Punkt) am Ende des Teils mit regulären Ausdrücken. Vorerst konnte ich die Zeichen entfernen, die nicht verwendet werden konnten.

** Hinzugefügt am 02.08.2017 ** Es wurde im Kommentar darauf hingewiesen, aber Sie können dies tun. Ich bemerkte, als mir gesagt wurde, aber aus irgendeinem Grund habe ich falsch verstanden, dass ich sie mit Rohren trennen musste.

python


String str = "XML-String-Version";
str = str.replaceAll("[^\\u0009\\u000A\\u000D\\u0020-\\uD7FF\\uE000-\\uFFFD\\x{10000}-\\x{10FFFF}]", "");

Schließlich

Ich habe diesen Artikel geschrieben, weil ich bei der Suche im WEB "Nicht enthaltene Zeichen entfernen" nicht finden konnte. Es gibt viele Möglichkeiten, nach Zeilen zu suchen, die diese nicht enthalten.

Recommended Posts

Spielen Sie andere Codewerte als XML-gültige Zeichen in Java ab
[Java] Beurteilung durch Eingabe von Zeichen in das Terminal
Java mit Visual Studio Code
Schreiben Sie Java8-ähnlichen Code in Java8
Stoppen Sie den Java-Prozess zwangsweise, indem Sie die PID in Windows PowerShell angeben
Errate den Zeichencode in Java
Java Spring-Umgebung in vs Code
Holen Sie sich null-sichere Map-Werte in Java
Beliebiger Code zum Erstellen von Zeichenfolgen durch Java
Tweak Markdown mit Java Flexmark-Java
Beispielcode zum Abrufen der wichtigsten JDBC-Typwerte in der Java + H2-Datenbank
Doppelte Karte sortiert nach Schlüssel in Java
Spielen Sie die Framework 2.6 (Java) -Umgebungskonstruktion mit Eclipse
Spielen Sie RAW-, WAV- und MP3-Dateien in Java ab
Alle gleichen Hash-Code-Zeichenfolgen in Java
[Mac] Installieren Sie Java in Visual Studio Code
Beispielquellcode zum Ermitteln des minimalen gemeinsamen Vielfachen mehrerer Werte in Java
Beispielcode zum Abrufen der wichtigsten SQL-Typwerte in Java + MySQL 8.0