Newsgroup: it.comp.lang.visual-basic
Titolo: [OT] file XML e caratteri "speciali"

Per l'home banking ho dovuto familiarizzare coi file XML
che non conoscevo.
 
Ho capito come trattare le vocali accentate e gli altri caratteri
rifiutati da XML come <>&"
 
Mi trovo in difficoltà col carattere ° molto usato (1° rata,
2° rata, eccetera).
Non viene dichiarato come carattere da rifiutare ma quando
è presente genera errore.
 
Qualcuno ha forse incontrato e risolto questo problema?
 
Grazie e saluti.
Sauro 
 
 

  &#62; 
"  &#34; 
'  &#39; 
 
Per cui 
Azienda Rossi & Figli Srl
<Nome>Azienda Rossi &#38; Figli Srl</Nome>

 
"Andrea (Work)" ha scritto nel messaggio.

Sono d'accordo con te Andrea.
Infatti uso la seguente funzione che gira bene:
 
Public Function Testo_XML(ByVal T As String) As String
T = Replace(T, "&", "&amp;")
T = Replace(T, "<", "&lt;")
T = Replace(T, ">", "&gt;")
T = Replace(T, Chr$(34), "&quot;")
T = Replace(T, "'", "&apos;")
T = Replace(T, "à", "&#224;")
T = Replace(T, "é", "&#233;")
T = Replace(T, "è", "&#232;")
T = Replace(T, "ì", "&#236;")
T = Replace(T, "ò", "&#242;")
T = Replace(T, "ù", "&#249;")
Testo_XML = T
End Function
 
Io nel mio progetto VB6 uso il riferimento:
Microsoft XML, v6.0
e quindi:
Public xDOC As MSXML2.DOMDocument
Set xDOC = New MSXML2.DOMDocument
xDOC.validateOnParse = False
'
If xDOC.Load(XMLnomeFile) Then
    'Va bene
Else
   ' The document failed to load.
   Dim strErrText As String
   Dim xPE As MSXML2.IXMLDOMParseError
   ' Obtain the ParseError object
   Set xPE = xDOC.parseError
   With xPE
      strErrText = "Your XML Document failed to load" & _
        "due the following error." & vbCrLf & _
        "Error #: " & .errorCode & ": " & xPE.reason & _
        "Line #: " & .Line & vbCrLf & _
        "Line Position: " & .linepos & vbCrLf & _
        "Position In File: " & .filepos & vbCrLf & _
        "Source Text: " & .srcText & vbCrLf & _
        "Document URL: " & .url
    End With
    MsgBox strErrText, vbExclamation
End If
 
Il problema nasce appunto quanto è presente
il carattere ° (gradi).
In questo caso il LOAD genera errore e fa riferimento
alla riga in cui è presente il carattere °
 
Ciao Andrea e grazie.
Sauro 
 
 

[cut]
 
Solo per dirla tutta aggiungo che io creo il
file XML con VB6 senza usare il riferimento
di cui nel post precedente.
 
Lo uso solo per rileggere il file in modo da
verificare l'assenza di errori.
 
Riciao Andrea
Sauro 
 
 

End Function
 
In pratica vai a sostiture al carattere il valore ASCII
 
Potresti generalizzare la funzione:
 
 Function Testo_XML (ByVal Ch As String) As String
 
   Testo_XML = Replace(Testo_XML, Ch, Chr(38) & "#" & Cstr (Asc(Ch)) &";" )
 
 End Function
 
Testo1 = Testo_XML(Testo1, "ù")
 
 
Non l'ho provata, è solo per darti uno spunto
 
 
-- 
ciao
  Stefano

 Non l'ho provata, è solo per darti uno spunto
 
Scusa Stefano ma forse non hai centrato il problema
al di là del fatto che la mia funzione possa essere
scritta meglio.
 
1) XML rifiuta un certo numero di caratteri che, se presenti,
     vanno "mascherati" nel modo che abbiamo visto
 
2) Il carattere ° (gradi) non fa parte di questa serie di caratteri
 
3) Usando nel progetto vb6 il riferimento:
Microsoft XML, v6.0
e quindi:
Public xDOC As MSXML2.DOMDocument
Set xDOC = New MSXML2.DOMDocument
If xDOC.Load(XMLnomeFile) Then
    'Va bene
Else
    'Da errore se è presente il carattere ° nel file
End If
 
4) come si spiega?
 
 
Ciao Stefano
Sauro
 
 



Non lo so, ma secondo la logica che hai usato prima, il carattere 
° in ASCII è 0xB0 o 176 decimale.
 
Se sostituendo  °  con  &#176;  non ti funziona allora il parser Xml non vede
quel carattere, di solito per i caratteri speciali si usano codifiche tipo UTF8.
 
https://it.wikipedia.org/wiki/UTF-8
 
 
Per usare UTF8 in Xml basta inserire all'inizio:
<?xml version="1.0" encoding="UTF-8"?>
 
http://www.w3schools.com/xml/xml_syntax.asp
 
 
Se vuoi modificare il tuo testo e salvarlo in UTF8 per provare lo puoi aprire e
poi salvare con Notepad usando la codifica UTF8 invece che ASCII.
 
Se devi usare  VB, la conversione si fa abbastanza semplicemente usando qualche
API, io l'ho fatto tempo fa, e se ti interessa posso rispolverare quel
programma.
 
 
-- 
ciao
  Stefano

 programma.
 
 
Grazie Stefano
 
Facio qualche prova e poi ti dirò.
 
Ciao, Sauro 
 
 

[CUT]
 
Sono andato a leggermi l'UTF8 e così ho capito il motivo
dell'errore generato dal carattere ° il quale supera i primi
128 caratteri ed io ho utilizzato il semplice file ASCII.
 
Poi ho riflettuto e fatto qualche prova per concludere che
i caratteri da tastiera che superano i primi 128 caratteri
sono veramente pochi (°£?ç§) oltre alle vocali minuscole
accentate.
 
Per cui ho deciso, almeno per il momento, di non imbarcarmi
nell'uso dell'UTF8 ma solamente di aggiungere qualche riga
nella mia funzione (&#numero;) per trattare quei cinque
caratteri.
 
Questo approfondimento sull'UTF8 mi è comunque servito
per capire e per risolvere il problema.
 
Grazie per l'aiuto.
Ciao Stefano
Sauro