Tworzę prosty plik XML 1.0 za pomocą krótkiej funkcji PL/SQL wypełnionej danymi z tabeli.PL/SQL konwertowanie znaków specjalnych
Dane z tabeli zawierają również znaki HTML, takie jak <>, & i tak dalej. Dla tych znaków specjalnych Mam zbudować krótki szukanie i funkcję, która wygląda tak wymienić:
newXmlString := REPLACE(xmlString, '&', '&');
newXmlString := REPLACE(newXmlString, '\', '');
newXmlString := REPLACE(newXmlString, '<', '<');
newXmlString := REPLACE(newXmlString, '>', '>');
newXmlString := REPLACE(newXmlString, '"', '"');
newXmlString := REPLACE(newXmlString, '''', ''');
Teraz nie ma więcej danych w tabeli, która ma ten skutek, że plik XML nie jest w stanie zweryfikować z powodu specjalne znaki sterujące (https://en.wikipedia.org/wiki/Control_character), takie jak:
- ETX (koniec tekstu)
- SYN (Synchronous Idle)
Uwaga: Nie każdy znak kontrolny uszkadza sprawdzanie poprawności pliku XML! Linebreaks lub Carriage Return są nadal możliwe.
Oczywiście, że teraz można wyszukiwać i zastępować je również, na przykład:
newXmlString := REPLACE(newXmlString, chr(3), ''); -- ETX end of text
Ale jest tam budować w funkcji lub coś podobnego biblioteki można używać z PL/SQL bez podawania i poszukiwania + zastępując je?
UPDATE 1
Próbowałem również użyć funkcji dbms_xmlgen.getxml
ale ta funkcja zgłasza błąd z powodu 'specjalnego char do uciekł konwersja char nie powiodło się.' +
UPDATE 2
Próbowałem użyć REGEXP_REPLACE(STRING_VALUE,'[[:cntrl:]]')
, który zadziała, ale spowoduje to również usunięcie podziałów linii, które chcemy zachować, a także nie ma wpływu na sprawdzanie poprawności pliku XML.
myślę 'dbms_xmlgen.convert()' jest to, czego szukasz –
@a_horse_with_no_name: będzie konwertować znaki html ale też nie znaki sterujące, takie jak „SYN” – frgtv10
Ale używając że nie trzeba dbać o wszystkie znaki HTML, tylko znaki kontrolne. –