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
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.
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
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.
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}]", "");
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