2016-04-19 12 views
0

Ich habe ein SQL-XML-Programm erstellt, das für die meisten Datensätze funktioniert, aber wegen der Daten auf nur ein paar Datensätze umkehrt.XML-Parsing-Fehler: nicht wohlgeformt - das liegt an Zeichen wie

Wie überwinde ich das Problem mit unerwünschten Zeichen. Ich erzeuge eine XML-Datei von einem SQL auf einer Oracle11g-Datenbank, aber bekomme die folgende Nachricht in ein paar Datensätzen. Einer der Datensätze zeigt einen XML-Tag-Feldtitel, der "9,96 + 0,99 P & H" enthält, siehe unten.

<?xml version="1.0" encoding="UTF-8"?> 
    <AV-XML xmlns="http://www.iceservices.com/0.7/AV-XML" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.iceservices.com/0.7/AV-XML AV-XML.xsd"> 
<Delivery> 
    <supplierType>ADMIN-AGENCY</supplierType> 
    <versionId>0.7</versionId> 
    <creationDateTime>2016-04-19T13:47:57+0100</creationDateTime> 
    <otherInformation>MIGRATION FIRST DELIVERY</otherInformation> 
</Delivery> 
<Message> 
<messageSequenceId>1</messageSequenceId> 
<messageType>NEW</messageType> 
<otherInformation>MIGRATION FIRST DELIVERY</otherInformation> 
<Production> 
    <prodCategoryType>COMMERCIAL</prodCategoryType> 
    <prodStatusType>SKELETON</prodStatusType> 
    <prodActive>true</prodActive> 
    <prodCueStatusType>NO</prodCueStatusType> 
    <prodTvInhouse>Y</prodTvInhouse> 
    <prodTotalDuration>PT3M</prodTotalDuration> 
    <priorityValue>1</priorityValue> 
    <prodTitle> 
    <title>CLASSIC LOVE SONGS OF RN R</title> 
    <titleType>ORIGINAL</titleType> 
    </prodTitle> 
    <prodTitle> 
    <title>ô9.96 + õ.99 P&amp;H</title> 
    <titleType>CAMPAIGN</titleType> 
    </prodTitle> 
    <prodId> 
    <idType>SOCIETY-ID</idType> 
    <id>75125334</id> 
    </prodId> 
    <prodId> 
    <idType>CLOCKID</idType> 
    <id>TMECSRL505180</id> 
    </prodId> 
    <prodAuthorizedIp> 
    <LASTNAME>BACC</LASTNAME> 
    </prodAuthorizedIp> 
</Production> 
</Message> 
</AV-XML> 

Wenn ich versuche, dies in Firefox oder IE zu öffnen, erhalte ich die folgende Meldung, die mich mit der Leitung ist der Fehler waren leitet. Welches ist die oben genannte 9,96 + õ99 P & H.

XML Parsing Error: not well-formed 
Location: file://///data2/data/Download/d7prdv1/prsrepreports /test_error_1.xml 
Line Number 26, Column 16:  <title>49.96 + �5.99 P&amp;H</title> 

Wie kann ich dieses Problem umgehen, soll ich die Zeichen ersetzen mit der REPLACE Oracle-Funktion mit etwas mehr akzeptabel?

+0

Ich sehe nicht ein Schließen '' -Tag. – ruudvan

+2

Bitte zeigen Sie einen Code, der dieses XML erzeugt hat. – ThinkJet

+0

ruudvan Tut mir leid, ich habe vergessen, den Beitrag zu formatieren, der jetzt enthalten ist –

Antwort

0

Ich glaube, dass geschachtelte REPLACE-Anweisungen sind, was Sie brauchen. Sie müssen nur die ASCII-Codes für die Zeichen kennen, die Sie ersetzen möchten. Sie haben 'ô' und 'õ' aufgelistet, also habe ich mit denen gearbeitet.

http://www.techonthenet.com/oracle/functions/replace.php

create table monkey(
    string1 VARCHAR2(30 CHAR) 
); 

insert into monkey values ('ô9.96 + õ.99 P&H'); 

select ASCII('ô') from dual; 
--50100 

select ASCII('õ') from dual; 
--50101 

select string1, REPLACE(REPLACE(string1, chr(50101), ''), chr(50100), '') from monkey; 

Oder einfach:

select string1, REPLACE(REPLACE(string1, chr(ASCII('ô')), ''), chr(ASCII('õ')), '') from monkey; 
+0

Die ersetzen Funktion arbeitete, also danke unningviolent –

+0

Sie sind uns willkommen! – runningviolent

0

Die beiden Charaktere können mit &ocirc; und &otilde; oder mit dem pass Dezember oder Hex-Code maskiert werden. Dies hängt vom Leser ...

Schauen Sie hier: http://www.w3schools.com/charsets/ref_utf_latin1_supplement.asp

Zusätzlich können Sie versuchen, die Kodierung UTF-16 zu ändern. Im Moment ist Ihre XML auf UTF-8 und die beiden O-Derivate sind nicht in der Basismenge von Zeichen enthalten ...

Ich weiß nicht, wie Orakel dies behandelt, aber in SQL Server ist es eine große Unterschied, wenn Sie Unicode angeben oder nicht. Der erste Anruf würde einen Fehler (ungültige Zeichen), den zweiten (Blick auf dem führenden „N“ und die UTF-16) funktionieren würde, werfen:

DECLARE @xml XML='<?xml version="1.0" encoding="UTF-8"?><root><title>ô9.96 + õ.99 P&amp;H</title></root>'; 
DECLARE @xml1 XML=N'<?xml version="1.0" encoding="UTF-16"?><root><title>ô9.96 + õ.99 P&amp;H</title></root>'; 
Verwandte Themen