Ik gebruik Delphi voor het openen/bewerken van een extern gedownload bestand. Dit bestand ziet er ongeveer zo uit: (header+1 record+footer):
Via de XML Data Binding wizard heb ik alle interfaces laten genereren, waaronder:
Via de volgende code open ik het bestand voor bewerking:
Het resultaat is dan:
De error kan ik met try..except wel afvangen, maar ik wil dan ter plekke de verbetering maken, dus het probleem-karakter vervangen door &#x[hex]; zodat hij wel door de parser wordt geaccepteerd. Via Google en Got-search kom ik alleen de mogelijkheden tegen om de fout af te vangen, niet om de fout pro-actief(mode-woord) te verbeteren in de juiste code.
XML:
Bij dit bestand hoort geen XSD ofzo.1
2
3
4
5
6
7
8
9
10
| <?xml version="1.0"?> <loc version="1.0" src="GeoBuddy"> <waypoint> <name id="svarmor"><![CDATA[svärmör (mother in law)]]></name> <coord lat="52.12395" lon="5.989783"/> <type>geocache</type> <subtype>traditional</subtype> <link text="Cache Details">http://www.geocaching.nu/cachedetails.jsp?cache=116</link> </waypoint> </loc> |
Via de XML Data Binding wizard heb ik alle interfaces laten genereren, waaronder:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| { IXMLLocType } IXMLLocType = interface(IXMLNodeCollection) ['{F8D2F1EC-C2C9-4285-AD37-A11D789480B0}'] { Property Accessors } function Get_Version: WideString; function Get_Src: WideString; function Get_Waypoint(Index: Integer): IXMLWaypointType; procedure Set_Version(Value: WideString); procedure Set_Src(Value: WideString); { Methods & Properties } function Add: IXMLWaypointType; function Insert(const Index: Integer): IXMLWaypointType; property Version: WideString read Get_Version write Set_Version; property Src: WideString read Get_Src write Set_Src; property Waypoint[Index: Integer]: IXMLWaypointType read Get_Waypoint; default; end; |
Via de volgende code open ik het bestand voor bewerking:
Delphi:
1
2
3
4
5
6
7
8
9
| procedure LeesLOC(Bestand:string); var LOCfile:IXMLLOCtype; begin LOCfile:=LoadLOC(Bestand); [...knip] end; |
Het resultaat is dan:
code:
1
2
3
4
5
| Project Project1.exe raised exception class EDOMParseError with message 'An invalid charcter was found in text content. Line: 4 <name id="svarmor"<!CDATA[sv'. |
De error kan ik met try..except wel afvangen, maar ik wil dan ter plekke de verbetering maken, dus het probleem-karakter vervangen door &#x[hex]; zodat hij wel door de parser wordt geaccepteerd. Via Google en Got-search kom ik alleen de mogelijkheden tegen om de fout af te vangen, niet om de fout pro-actief(mode-woord) te verbeteren in de juiste code.