Ciao.
devo leggere un formato di dati con una stessa logica di lettura da un xml e da un file di testo.
Ad es:
riga file di testo:
xmlcodice:#21=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#23);
il ref 23:codice:<IfcArbitraryClosedProfileDef id="21"> <ProfileType>area</ProfileType> <OuterCurve> <IfcPolyline xsi:nil="true" ref="23"/> </OuterCurve> </IfcArbitraryClosedProfileDef>
[code]
#23=IFCPOLYLINE((#41,#42,#43,#44,#45,#46,#47,#48,# 49,#50,#51,#52,#41));
[code]
e xml:
alla fine voglio trovare una serie di dati con i valori dei IfcCartesianPoint che sono circa cosi:codice:<IfcPolyline id="23"> <Points ex:cType="list"> <IfcCartesianPoint pos="0" xsi:nil="true" ref="41"/> <IfcCartesianPoint pos="1" xsi:nil="true" ref="42"/> <IfcCartesianPoint pos="2" xsi:nil="true" ref="43"/> <IfcCartesianPoint pos="3" xsi:nil="true" ref="44"/> <IfcCartesianPoint pos="4" xsi:nil="true" ref="45"/> <IfcCartesianPoint pos="5" xsi:nil="true" ref="46"/> <IfcCartesianPoint pos="6" xsi:nil="true" ref="47"/> <IfcCartesianPoint pos="7" xsi:nil="true" ref="48"/> <IfcCartesianPoint pos="8" xsi:nil="true" ref="49"/> <IfcCartesianPoint pos="9" xsi:nil="true" ref="50"/> <IfcCartesianPoint pos="10" xsi:nil="true" ref="51"/> <IfcCartesianPoint pos="11" xsi:nil="true" ref="52"/> <IfcCartesianPoint pos="12" xsi:nil="true" ref="41"/> </Points> </IfcPolyline>
x 2 coordinate
txt
xmlcodice:#41=IFCCARTESIANPOINT((-152.4,-63.5));
mentre leggo l'xml tag per tag o il file di testo riga per riga instanzio delle classi corrispondenti al tipo di nodo o di testo(#41=IFCCARTESIANPOINT ((-152.4,-63.5))o <ifccartesianpoint></ ec.... ;e popolo questa classe, alla fine le metto in una mappa di riferimenti popolati e eseguo la logica dell applicativo che è uguale per tutti e due i formati e che ho gia fatto ma non voglio pubblicare qui perchè è relativamente importante ai fini del post.codice:<IfcCartesianPoint id="i87"> <Coordinates ex:cType="list"> <IfcLengthMeasure pos="0">0.</IfcLengthMeasure> <IfcLengthMeasure pos="1">0.</IfcLengthMeasure> </Coordinates> </IfcCartesianPoint>
Ecco vorrei utilizzare il polimorfismo o i function object (come shodan mi ha insegnato e che forse qui possono tornare utili)per popolare le classi in modo differente se sono in un file di testo o in un xml , mantenendo la logica dell applicazione in una classe comune CLogica uguale.
quello che ho pensato è di considerare la posizione nella riga di testo per i valori , ad es :
1)leggere nome IFCARBITRARYCLOSEDPROFILEDEF e instanziare classe corrispondente
2)dopo alla posizione 2 leggere tipo profilo(area nel caso)
3)alla posizione 4 risolvere riferimento 23(nel caso):
queste "posizioni" mi sembrano uguali a quelle dei tag xml:codice:#21=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#23);
ma mi sembra un metodo poco sicuro , dato che questa corrispondenza non è specificata.codice:1)<IfcArbitraryClosedProfileDef id="21"> 2) <ProfileType>area</ProfileType> <OuterCurve> 4) <IfcPolyline xsi:nil="true" ref="23"/> </OuterCurve> </IfcArbitraryClosedProfileDef>
consigli ?
grazie in anticipo.

Rispondi quotando