Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-02-2006, 10:25   #1
gaglioppo
Senior Member
 
L'Avatar di gaglioppo
 
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
[JAVA] costruire unalbero di parsing HTML

ciao amici,
mi è necessario analizzare delle pagine html, in particolare vorrei trovare o realizzare qualcosa che mi costruisca un albero di parsing html che mi dia una struttura da analizzare efficacemente.

Dovrei essere in grado di catturare form html, l'action e gli input.
Già riesco a farlo, ma le operazioni sono macchinose e nn sempre efficienti (almeno credo).

Esistono per caso librerie già pronte per questo scopo?

grazie e a presto
__________________
Nunc est bibendum
gaglioppo è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2006, 10:51   #2
alesnoce
Member
 
Iscritto dal: May 2005
Messaggi: 80
Prova a guardare Xerces della Apache, mi sembra che oltre al parsing xml permetta il parsing html.
alesnoce è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2006, 10:53   #3
alesnoce
Member
 
Iscritto dal: May 2005
Messaggi: 80
...per crearti un albero devi utilizzare il parsing DOM e non il SAX
alesnoce è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2006, 11:08   #4
gaglioppo
Senior Member
 
L'Avatar di gaglioppo
 
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
Quote:
Originariamente inviato da alesnoce
...per crearti un albero devi utilizzare il parsing DOM e non il SAX
ecco ne avevo proprio ora trovato notizia.
Stavo vedendo le classi DOM.

Conosci qualche sito dove potrei trovare qualche esempio in merito?
Sinceramente nn ho capito ancora quale sia l'approccio per analizzare l'html. Presumo che dovrebbe venire tutto catturato e che automaticamente si possono estrarre le info che mi servono.

Mi chiedevo però se nel caso dell'html, questi parser siano in grado di affrontare il problema di pagine html mal formate.

grazie
__________________
Nunc est bibendum
gaglioppo è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2006, 12:10   #5
alesnoce
Member
 
Iscritto dal: May 2005
Messaggi: 80
Quello che ho trovato per me è parsing xml con DOM su c++, non credo che faccia al caso tuo.

Per quanto ne so la libreria Xerces prevede anche metodi per la validazione, che però io ho accuratamente evitato

Di esempi ne trovi anche navigando in http://xerces.apache.org/, il sito ufficiale;
in alternativa tocca ricorrere a google (prova con "tutorial ...") .
Però aspetta, prova a quardare le 4 pagg. che partono da http://www.onlamp.com/pub/a/onlamp/2...om.html?page=1 e poi, per la visita dell'albero
Codice:
import java.io.IOException;                   // Exception handling
import org.w3c.dom.*;                         // DOM interface
import org.apache.xerces.parsers.DOMParser;   // Parser (to DOM)

/**************************************
class DocumentMaker encapsulates all parser dependent code.
If you change XML parsers, only this class
and the parser's import statement need be modified.
As written, DocumentMaker uses DOMParser from Apache.
**************************************/
class DocumentMaker {
  private Document doc;
  public Document getDocument () {return(doc);}
  public DocumentMaker (String filename) {
    try {
      DOMParser dp = new DOMParser();
      dp.parse(filename);
      doc = dp.getDocument();
    }
    catch (Exception e) {
      System.out.println("\nError: " + e.getMessage());
    }
  }
}

/**************************************
class NodeTypes encapsulates text names for the various node types.
Its asAscii method returns those strings according to its
nodeTypeNumber argument. It's a number to string translator.
**************************************/
class NodeTypes {
  private static String[] nodenames={"ELEMENT","ATTRIBUTE","TEXT",
       "CDATA_SECTION","ENTITY_REFERENCE",
       "ENTITY","PROCESSING_INSTRUCTION",
       "COMMENT","DOCUMENT","DOCUMENT_TYPE",
       "DOCUMENT_FRAGMENT","NOTATION"};
  public static String asAscii(int nodeTypeNumber) {
    return(nodenames[nodeTypeNumber-1]);
  }
}

/**************************************
class DOMwalker's job is to walk the DOM document
and print out each node's
type, its name, its value (null for Elements), and
in the case of elements, its attributes in parentheses.
The tree is walked non-recursively using standard DOM
traversal methods.
**************************************/
class DOMwalker {
  private Node checker;    // like a checker that gets moved from 
                           // square to square in a checkers game
                           // points to "current" node

  private void indentToLevel(int level) {
    for(int n=0; n < level; n++) {
      System.out.print("  ");
    }
  }
  
  private void printNodeInfo(Node thisNode) {
    System.out.print(NodeTypes.asAscii(thisNode.getNodeType()) + " : " + 
                       thisNode.getNodeName() + " : " + 
                       thisNode.getNodeValue() + " : ");

    System.out.println();
  }
!!!!!!!!!!!!!!!!!       UTILISSIMO     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  public DOMwalker(Document doc) {
    boolean ascending = false;
    int level = 1;
    System.out.println();
    try {
      checker=doc.getDocumentElement();
      while (true) {
        //*** TAKE ACTION ON NODE WITH CHECKER ***
        if (!ascending) {
          indentToLevel(level);
          printNodeInfo(checker);
        }
        //*** GO DOWN IF YOU CAN ***
        if ((checker.hasChildNodes()) && (!ascending)) {
          checker=checker.getFirstChild();
          ascending = false;
          level++;
        }
        //*** OTHERWISE GO RIGHT IF YOU CAN ***
        else if (checker.getNextSibling() != null) {
          checker=checker.getNextSibling();
          ascending = false;
        }
        //*** OTHERWISE GO UP IF YOU CAN ***
        else if (checker.getParentNode() != null) {
          checker=checker.getParentNode();
          ascending = true;
          level--;
        }
        //*** OTHERWISE YOU'VE ASCENDED BACK TO ***
        //*** THE DOCUMENT ELEMENT, SO YOU'RE DONE ***
        else {
          break;
        }
      }
    }
    catch (Exception e) {
      System.out.println("\nError: " + e.getMessage());
    }
  }
}

/**************************************
Class Hello is the repository of this program's main routine.
It removes empty text nodes, then walks the DOM tree and
prints out the DOM tree's info.
**************************************/
class Hello {
  public static void main(String[] args) {
    String filename = args[0];
    System.out.print("Walking XML file " + filename + " ... ");
    DocumentMaker docMaker = new DocumentMaker(filename);
    Document doc = docMaker.getDocument();
    try {
      DOMwalker walker = new DOMwalker(doc);
    }
    catch (Exception e) {
      System.out.println("\nError: " + e.getMessage());
    }
  }
}
soprattutto le righe che ho fatto precedere da !!!!!! UTILISSIMO!!!!!!!!

Quello che brevemente posso anticiparti è che effettuando il parsing con il Document Object Model (DOM) ottieni un albero nel quale la radice è il documento stesso, e i nodi figli sono corrispondenti ai tag del documento.

Se ti serve qualche altra delucidazione chiedi pure, ciao
alesnoce è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2006, 18:18   #6
gaglioppo
Senior Member
 
L'Avatar di gaglioppo
 
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
una idea me la sono fatta.
In pratica il mio obiettivo sarebbe questo:
1.catturare una pagina html (e so farlo) in java
2.creare un oggetto Albero con l'aiuto delle Dom (non so come)
3.interrogare opportunamente l'albero (ricerca) e avere metodi che
possano restituirmi facilmente, ad esempio, l'action o il value degli input di una form

Il punto 2 è cruciale ed avrei bisogno di aiuto.

Sto scaricando la lib dal sito dell'xerces (ho un fulmine di 56k).
ho visto le classi della libreria org.w3c.dom.html e ho notato proprio le interfacce che servirebbero a me (HTMLFormElement e HTMLInputElement) con relativi metodi.
E qui nasce un altro problema, devo andare a riguardare come si crea una classe che implementi un'interface.
Devo fare l'overloading dei metodi dell'interfaccia, ma nn so in che modo.

Qualcuno mi consiglia una strada rapida, tempus fugit.

grazie
__________________
Nunc est bibendum
gaglioppo è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2006, 19:48   #7
alesnoce
Member
 
Iscritto dal: May 2005
Messaggi: 80
Ecco la funzione all'interno della quale effettuo il parsing di un file xmi (XML Metadata Interchange), ma come noterai è c++.
Spero ti sia comunque di aiuto.

Codice:
  /***************     void CreateModel(char* _modelFile, char* _fileScenario)

      legge il file xmi del modello e crea la struttura della macchina a stati
      conseguentemente
                                                           ******************/

void StateMachine::CreateModel(char* _modelFile, char* _fileScenario)
{
  /**               inizializzo il parsing XML                  */
  try { XMLPlatformUtils::Initialize(); }
  catch(XMLException& toCatch)
  {
    char* message = XMLString::transcode(toCatch.getMessage());
    std::cout << "XML toolkit initialization error: " << message << std::endl;
    XMLString::release(&message);
  }    
 
  /**               creo un'istanza del parser DOM                 */
  XercesDOMParser* parser = new XercesDOMParser();

  // disabilito la validazione dei documenti XML
  parser->setValidationScheme(XercesDOMParser::Val_Never);
  parser->setDoSchema(false);
  parser->setLoadExternalDTD(false);

  try { parser->parse(_modelFile); }    
  catch (const XMLException& toCatch) 
  {
    char* message = XMLString::transcode(toCatch.getMessage());
    std::cout << "Exception message is: " << message << std::endl;
    XMLString::release(&message);
  }
  catch (const DOMException& toCatch) 
  {
    char* message = XMLString::transcode(toCatch.msg);
    std::cout << "Exception message is: " << message << std::endl;
    XMLString::release(&message);
  }
  catch (...) 
  {
    std::cout << "Unexpected Exception" << std::endl;
  }

  /**               creo un'istanza del builder DOM                  */
  XMLCh tempStr[100];
  XMLString::transcode("LS", tempStr, 99);
  DOMImplementation* impl = 
                    DOMImplementationRegistry::getDOMImplementation(tempStr);
  DOMBuilder* builder = ((DOMImplementationLS*)impl)->
            createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, 0);
  DOMDocument* modelDoc = 0;
  
  try { modelDoc = builder->parseURI(_modelFile); }   
  catch (const XMLException& toCatch) 
  {
    char* message = XMLString::transcode(toCatch.getMessage());
    std::cout << "Exception message is: " << message << std::endl;
    XMLString::release(&message);
  }
  catch (const DOMException& toCatch) 
  {
    char* message = XMLString::transcode(toCatch.msg);
    std::cout << "Exception message is: " << message << std::endl;
    XMLString::release(&message);
  }
  catch (...) 
  {
    std::cout << "Unexpected Exception" << std::endl;
  }

  if ( modelDoc == 0 ) 
  {
    std::cout << builder << std::endl;
    std::cout << modelDoc << std::endl;
    std::cout << "non ha tirato su il file!!!!!!" << std::endl;
  }
  
  /**          Nomi dei nodi                       */
  char* cAction = "UML2:OpaqueBehavior";
  const XMLCh* action = XMLString::transcode(cAction);

  char* cDeferrableEvent = "UML2:State.doActivity";
  const XMLCh* deferrableEvent = XMLString::transcode(cDeferrableEvent);

  char* cDiagram = "UML:Diagram";
  const XMLCh* diagram = XMLString::transcode(cDiagram);

  char* cEntryAction = "UML2:State.entry";
  const XMLCh* entryAction = XMLString::transcode(cEntryAction);

  char* cExitAction = "UML2:State.exit";
  const XMLCh* exitAction = XMLString::transcode(cExitAction);

  char* cFinalState = "UML2:FinalState";
  const XMLCh* finalState = XMLString::transcode(cFinalState);

  char* cGuard = "UML2:Constraint";
  const XMLCh* guard = XMLString::transcode(cGuard);

  char* cPseudostate = "UML2:Pseudostate";
  const XMLCh* pseudostate = XMLString::transcode(cPseudostate);

  char* cRegion = "UML2:Region";
  const XMLCh* region = XMLString::transcode(cRegion);
  char* cRegionDot = "UML2:Region.";
  const XMLCh* regionDot = XMLString::transcode(cRegionDot);
  char* cRegionSlash = "/UML2:Region";
  const XMLCh* regionSlash = XMLString::transcode(cRegionSlash);

  char* cRegionTransition = "UML2:Region.transition";
  const XMLCh* regionTransition = XMLString::transcode(cRegionTransition);
  char* cRegionTransitionSlash = "/UML2:Region.transition";
  const XMLCh* regionTransitionSlash = 
        XMLString::transcode(cRegionTransitionSlash);

  char* cState = "UML2:State";
  const XMLCh* state = XMLString::transcode(cState);
  char* cStateDot = "UML2:State.";
  const XMLCh* stateDot = XMLString::transcode(cStateDot);
  char* cStateSlash = "/UML2:State";
  const XMLCh* stateSlash = XMLString::transcode(cStateSlash);

  char* cStateMachine = "UML2:StateMachine";
  const XMLCh* stateMachine = XMLString::transcode(cStateMachine);
  char* cStateMachineDot = "UML2:StateMachine.";
  const XMLCh* stateMachineDot = XMLString::transcode(cStateMachineDot);
  char* cStateMachineSlash = "/UML2:StateMachine";
  const XMLCh* stateMachineSlash = XMLString::transcode(cStateMachineSlash);

  char* cTransition = "UML2:Transition";
  const XMLCh* transition = XMLString::transcode(cTransition);
  char* cTransitionDot = "UML2:Transition.";
  const XMLCh* transitionDot = XMLString::transcode(cTransitionDot);
  char* cTransitionSlash = "/UML2:Transition";
  const XMLCh* transitionSlash = XMLString::transcode(cTransitionSlash);

  char* cTransitionEffect = "UML2:Transition.effect";
  const XMLCh* transitionEffect = XMLString::transcode(cTransitionEffect);

  char* cTransitionGuard = "UML2:Transition.guard";
  const XMLCh* transitionGuard = XMLString::transcode(cTransitionGuard);

  char* cTransitionSource = "UML2:Transition.source";
  const XMLCh* transitionSource = XMLString::transcode(cTransitionSource);

  char* cTransitionTarget = "UML2:Transition.target";
  const XMLCh* transitionTarget = XMLString::transcode(cTransitionTarget);

  char* cTransitionTrigger = "UML2:Transition.trigger";
  const XMLCh* transitionTrigger = XMLString::transcode(cTransitionTrigger);

  char* cTrigger = "UML2:CallTrigger";
  const XMLCh* trigger = XMLString::transcode(cTrigger);

  char* cTriggerZone = "UML2:BehavioredClassifier.ownedTrigger";
  const XMLCh* triggerZone = XMLString::transcode(cTriggerZone);

  /**          Nomi degli attributi                       */
  char* cKind = "kind";
  const XMLCh* kind = XMLString::transcode(cKind);

  char* cName = "name";
  const XMLCh* name = XMLString::transcode(cName);

  char* cXMIID = "xmi.id";
  const XMLCh* xmiID = XMLString::transcode(cXMIID);

  char* cXMIIDref = "xmi.idref";
  const XMLCh* xmiIDref = XMLString::transcode(cXMIIDref);
 
  /**               Strutture dati                       */
  enum element {eRegion, eAndState, eOrState} lastElement;
  
  DOMElement* childNodeElement = 0;
  DOMElement* currentElement = 0;
  DOMElement* fatherNodeElement = 0;
  DOMElement* sourceNodeElement = 0;
  DOMElement* targetNodeElement = 0;
  DOMElement* triggerZoneNodeElement = 0;
  DOMNode* childNode = 0;
  DOMNode* currentNode = 0;
  DOMNode* fatherNode = 0;
  DOMNode* regionNode = 0;
  DOMNode* sourceNode = 0;
  DOMNode* targetNode = 0;
  DOMNode* triggerZoneNode = 0;
  DOMNodeList* currentNodeChildrenList = 0;
  DOMNodeList* triggersList = 0;
  const XMLCh* currentAttribute = 0;

  char* currentKind = "";
  char* currentName = "";
  char* currentUUID = "";
  
  bool ascending(false);        // direzione di visita dell'albero
  bool found(false);
  bool modelZone(true);         // serve ad evitare le informazioni grafiche
  bool transitionsZone(false);  // indica se vanno acquisite le transizioni      
  
  map<string, int>::iterator msiit;
  map<string, vector<int> >::iterator msviit;

  stack<int> fathersIDs;
  stack<int> fathersTypes;
  
  fathersIDs.push(0);
  lastElement = eOrState;
  fathersTypes.push(lastElement);

  /**          Visita dell'albero del documento                       */
  currentElement = modelDoc->getDocumentElement();
  currentNode = currentElement;

  // acquisisco la lista dei trigger 
  currentNodeChildrenList = currentElement->
                            getElementsByTagName(triggerZone);

  if ( currentNodeChildrenList->getLength() > 0 )
    triggerZoneNode = currentNodeChildrenList->item(0);

  if ( triggerZoneNode != 0 )
  {
    if ( DOMNode::ELEMENT_NODE == triggerZoneNode->getNodeType() )
      triggerZoneNodeElement = dynamic_cast<DOMElement*>(triggerZoneNode);

    triggersList = triggerZoneNodeElement->getElementsByTagName(trigger);
  }        

  // visita depht first anticipata 
  while ( modelZone ) 
  {
    if ( DOMNode::ELEMENT_NODE == currentNode->getNodeType() )
      currentElement = dynamic_cast<DOMElement*>(currentNode);
    
    if ( !ascending )      // quindi nodo visitato per la prima volta
    {              
      childNode = 0;
      childNodeElement = 0;
        
                    /**       TRANSITION          */
      if ( XMLString::equals(currentNode->getNodeName(), transition) &&
           !(XMLString::equals(currentNode->getNodeName(), transitionDot)) &&
           !(XMLString::equals(currentNode->getNodeName(), transitionSlash)) &&
           transitionsZone ) 
      {
        // acquisisco l'UUID della transizione
        char* transitionUUID = "";
        char* triggerParam = "";
        char* guardParam = "";
        char* actionParam = "";

        int sourceStateID = -1;
        int targetStateID = -1;
                  
        currentAttribute = currentElement->getAttribute(xmiID);
        transitionUUID = XMLString::transcode(currentAttribute);
       
        // acquisisco il trigger della transizione
        currentNodeChildrenList = currentElement->
                                  getElementsByTagName(transitionTrigger);

        if ( (currentNodeChildrenList->getLength() > 0) &&
             (triggerZoneNode != 0) ) 
        {
          found = false;
          
          childNode = currentNodeChildrenList->item(0);
   
          if ( DOMNode::ELEMENT_NODE == childNode->getNodeType() )
            childNodeElement = dynamic_cast<DOMElement*>(childNode);
          
          currentNodeChildrenList = childNodeElement->
                                    getElementsByTagName(trigger);
          childNode = currentNodeChildrenList->item(0);
   
          if ( DOMNode::ELEMENT_NODE == childNode->getNodeType() )
            childNodeElement = dynamic_cast<DOMElement*>(childNode);
          
          currentAttribute = childNodeElement->getAttribute(xmiIDref);
          currentUUID = XMLString::transcode(currentAttribute);
          
          for ( int i=0; (i<(triggersList->getLength()))&&(!found); i++ )
          {
            childNode = triggersList->item(i);
   
            if ( DOMNode::ELEMENT_NODE == childNode->getNodeType() )
              childNodeElement = dynamic_cast<DOMElement*>(childNode);
          
            currentAttribute = childNodeElement->getAttribute(xmiID);
       
            if ( XMLString::equals(XMLString::transcode(currentAttribute), 
                                   currentUUID) )
            {
              currentAttribute = childNodeElement->getAttribute(name);
              triggerParam = XMLString::transcode(currentAttribute);
             
              found = true; 
            }     
          }        
        }        

        // acquisisco la guardia della transizione
        currentNodeChildrenList = currentElement->
                                  getElementsByTagName(transitionGuard);

        if ( currentNodeChildrenList->getLength() > 0 ) 
        {
          childNode = currentNodeChildrenList->item(0);
   
          if ( DOMNode::ELEMENT_NODE == childNode->getNodeType() )
            childNodeElement = dynamic_cast<DOMElement*>(childNode);
          
          currentNodeChildrenList = childNodeElement->
                                    getElementsByTagName(guard);
          childNode = currentNodeChildrenList->item(0);
   
          if ( DOMNode::ELEMENT_NODE == childNode->getNodeType() )
            childNodeElement = dynamic_cast<DOMElement*>(childNode);
          
          currentAttribute = childNodeElement->getAttribute(name);
          guardParam = XMLString::transcode(currentAttribute);
        }        

        // acquisisco la action della transizione
        currentNodeChildrenList = currentElement->
                                  getElementsByTagName(transitionEffect);

        if ( currentNodeChildrenList->getLength() > 0 ) 
        {
          childNode = currentNodeChildrenList->item(0);
   
          if ( DOMNode::ELEMENT_NODE == childNode->getNodeType() )
            childNodeElement = dynamic_cast<DOMElement*>(childNode);
          
          currentNodeChildrenList = childNodeElement->
                                    getElementsByTagName(action);
          childNode = currentNodeChildrenList->item(0);
   
          if ( DOMNode::ELEMENT_NODE == childNode->getNodeType() )
            childNodeElement = dynamic_cast<DOMElement*>(childNode);
          
          currentAttribute = childNodeElement->getAttribute(name);
          actionParam = XMLString::transcode(currentAttribute);
        }        

        // determino se la transizione è internal o meno
        currentAttribute = currentElement->getAttribute(kind);
        currentKind = XMLString::transcode(currentAttribute);
                                            // INTERNAL
        if ( XMLString::equals(currentKind, "internal") )
        {
          // trovo lo stato di cui fa parte
          currentNodeChildrenList = currentElement->
                                    getElementsByTagName(transitionSource);
          childNode = currentNodeChildrenList->item(0);
   
          if ( DOMNode::ELEMENT_NODE == childNode->getNodeType() )
            childNodeElement = dynamic_cast<DOMElement*>(childNode);
    
          currentNodeChildrenList = childNodeElement->
                                    getElementsByTagName(state);
          sourceNode = currentNodeChildrenList->item(0);
   
          if ( DOMNode::ELEMENT_NODE == sourceNode->getNodeType() )
            sourceNodeElement = dynamic_cast<DOMElement*>(sourceNode);
          
          currentAttribute = sourceNodeElement->getAttribute(xmiIDref);
          currentUUID = XMLString::transcode(currentAttribute);
          msiit = statesMapping.find(currentUUID);
          
          if ( msiit != statesMapping.end() )
          {
            sourceStateID = (*msiit).second;
            AddTransition(transitionUUID, sourceStateID, sourceStateID,
                          triggerParam, guardParam, actionParam, true);
                          
            if ( (!(EvaluateEvent(triggerParam, sourceStateID, 
                                  transitionsIndex-1, true, microStep))) ||
                 (!(EvaluateEvent(guardParam, sourceStateID, 
                                  transitionsIndex-1, true, microStep))) ||
                 (!(EvaluateAction(actionParam))) )
            {
              std::cout << "ERRORE NELLA TRANSIZIONE " << transitionUUID;
              std::cout << std::endl;
            }     
          }     
        }     
        else                                // EXTERNAL
        {
          // trovo il source della transizione
          currentNodeChildrenList = currentElement->
                                    getElementsByTagName(transitionSource);
          sourceNode = currentNodeChildrenList->item(0);
   
          if ( DOMNode::ELEMENT_NODE == sourceNode->getNodeType() )
            sourceNodeElement = dynamic_cast<DOMElement*>(sourceNode);
    
          currentNodeChildrenList = sourceNodeElement->
                                    getElementsByTagName(state);
          // se il source è uno state
          if ( currentNodeChildrenList->getLength() > 0 ) 
          {
            sourceNode = currentNodeChildrenList->item(0);
   
            if ( DOMNode::ELEMENT_NODE == sourceNode->getNodeType() )
              sourceNodeElement = dynamic_cast<DOMElement*>(sourceNode);
          
            currentAttribute = sourceNodeElement->getAttribute(xmiIDref);
            currentUUID = XMLString::transcode(currentAttribute);
            msiit = statesMapping.find(currentUUID);
          
            if ( msiit != statesMapping.end() )
              sourceStateID = (*msiit).second;
            
            //                      trovo il target della transizione
            currentNodeChildrenList = currentElement->
                                      getElementsByTagName(transitionTarget);
            targetNode = currentNodeChildrenList->item(0);
   
            if ( DOMNode::ELEMENT_NODE == targetNode->getNodeType() )
              targetNodeElement = dynamic_cast<DOMElement*>(targetNode);
    
            currentNodeChildrenList = targetNodeElement->
                                      getElementsByTagName(state);
            //                         se il target è uno state
            if ( currentNodeChildrenList->getLength() > 0 ) 
            {
              targetNode = currentNodeChildrenList->item(0);
   
              if ( DOMNode::ELEMENT_NODE == targetNode->getNodeType() )
                targetNodeElement = dynamic_cast<DOMElement*>(targetNode);
          
              currentAttribute = targetNodeElement->getAttribute(xmiIDref);
              currentUUID = XMLString::transcode(currentAttribute);
              msiit = statesMapping.find(currentUUID);
          
              if ( msiit != statesMapping.end() )
              {  
                targetStateID = (*msiit).second;
                AddTransition(transitionUUID, sourceStateID, targetStateID,
                              triggerParam, guardParam, actionParam, false);
  
                if ( (!(EvaluateEvent(triggerParam, sourceStateID, 
                                      transitionsIndex-1, true, microStep))) ||
                     (!(EvaluateEvent(guardParam, sourceStateID, 
                                      transitionsIndex-1, true, microStep))) ||
                     (!(EvaluateAction(actionParam))) )
                {
                  std::cout << "ERRORE NELLA TRANSIZIONE " << transitionUUID;
                  std::cout << std::endl;
                }     
              }     
            }
            else                 // se il target non è uno state   
            {
              currentNodeChildrenList = targetNodeElement->
                                        getElementsByTagName(pseudostate);
              //                         se il target è uno pseudostate
              if ( currentNodeChildrenList->getLength() > 0 ) 
              {
                targetNode = currentNodeChildrenList->item(0);
   
                if ( DOMNode::ELEMENT_NODE == targetNode->getNodeType() )
                  targetNodeElement = dynamic_cast<DOMElement*>(targetNode);

                currentAttribute = targetNodeElement->getAttribute(xmiIDref);
                currentUUID = XMLString::transcode(currentAttribute);
                                            // target choice o junction
                if ( choicesJunctions.find(currentUUID) != 
                     choicesJunctions.end() )
                {
                  msviit = cjInc.find(currentUUID);

                  if ( msviit == cjInc.end() )
                  {
                    vector<int> trvec;
                    trvec.push_back(transitionsIndex);
                    cjInc.insert(make_pair(currentUUID, trvec));
                  }
                  else
                    (*msviit).second.push_back(transitionsIndex);
                    
                  AddTransition(transitionUUID, sourceStateID, -1, triggerParam,
                                guardParam, actionParam, false);

                  if ( (!(EvaluateEvent(triggerParam, sourceStateID, 
                                      transitionsIndex-1, true, microStep))) ||
                       (!(EvaluateEvent(guardParam, sourceStateID, 
                                      transitionsIndex-1, true, microStep))) ||
                       (!(EvaluateAction(actionParam))) )
                  {
                    std::cout << "ERRORE NELLA TRANSIZIONE " << transitionUUID;
                    std::cout << std::endl;
                  }     
                }     
                                            // target fork
                else if ( forksInc.find(currentUUID) != forksInc.end() )
                {
                  msiit = forksInc.find(currentUUID);
                  
                  if ( (*msiit).second == (-1) )
                  {
                    (*msiit).second = transitionsIndex;
                    msiit = forksOutc.find(currentUUID);
                    targetStateID = (*msiit).second;

                    AddTransition(transitionUUID, sourceStateID, 
                                  targetStateID, triggerParam, guardParam, 
                                  actionParam, false);

                    if ( (!(EvaluateEvent(triggerParam, sourceStateID, 
                                    transitionsIndex-1, true, microStep))) ||
                         (!(EvaluateEvent(guardParam, sourceStateID, 
                                    transitionsIndex-1, true, microStep))) ||
                         (!(EvaluateAction(actionParam))) )
                    {
                      std::cout << "ERRORE NELLA TRANSIZIONE ";
                      std::cout << transitionUUID << std::endl;
                    }     
                  }     
                }     
                                            // target join
                else if ( joinsInc.find(currentUUID) != joinsInc.end() )
                {
                  msiit = joinsInc.find(currentUUID);

                  int fatherID = GetState(sourceStateID)->GetAncestor(0);
                  
                  if ( ((*msiit).second == (-1)) && 
                       (GetState(fatherID)->IsOrthogonal()) )
                  {
                    sourceStateID = GetState(fatherID)->GetAncestor(0);
                    (*msiit).second = transitionsIndex;
                    msiit = joinsOutc.find(currentUUID);
                    
                    if ( (*msiit).second != (-1) )
                    {
                      targetStateID = (*msiit).second;
                      AddTransition(transitionUUID, sourceStateID, 
                                    targetStateID, triggerParam, guardParam, 
                                    actionParam, false);
                    }  
                    else   
                    {
                      targetStateID = GetState(sourceStateID)->GetAncestor(0);
                      AddTransition(transitionUUID, sourceStateID, 
                                    targetStateID, triggerParam, guardParam, 
                                    actionParam, false);
                    }  

                    if ( (!(EvaluateEvent(triggerParam, sourceStateID, 
                                    transitionsIndex-1, true, microStep))) ||
                         (!(EvaluateEvent(guardParam, sourceStateID, 
                                    transitionsIndex-1, true, microStep))) ||
                         (!(EvaluateAction(actionParam))) )
                    {
                      std::cout << "ERRORE NELLA TRANSIZIONE ";
                      std::cout << transitionUUID << std::endl;
                    }     
                  }     
                }     
              } 
              else    // se il target non è né uno state né uno pseudostate   
              {
                currentNodeChildrenList = targetNodeElement->
                                          getElementsByTagName(finalState);
                //                         se il target è un final state
                if ( currentNodeChildrenList->getLength() > 0 ) 
                {
                  targetStateID = GetState(sourceStateID)->GetAncestor(0);
                  AddTransition(transitionUUID, sourceStateID, targetStateID,
                                triggerParam, guardParam, actionParam, false);

                  if ( (!(EvaluateEvent(triggerParam, sourceStateID, 
                                      transitionsIndex-1, true, microStep))) ||
                       (!(EvaluateEvent(guardParam, sourceStateID, 
                                      transitionsIndex-1, true, microStep))) ||
                       (!(EvaluateAction(actionParam))) )
                  {
                    std::cout << "ERRORE NELLA TRANSIZIONE " << transitionUUID;
                    std::cout << std::endl;
                  }     
                }     
              } 
            }        
          }        
          else       // se il source non è uno state
          {
            currentNodeChildrenList = sourceNodeElement->
                                      getElementsByTagName(pseudostate);
                    // se il source è uno pseudostate
            if ( currentNodeChildrenList->getLength() > 0 ) 
            {
              sourceNode = currentNodeChildrenList->item(0);
   
              if ( DOMNode::ELEMENT_NODE == sourceNode->getNodeType() )
                sourceNodeElement = dynamic_cast<DOMElement*>(sourceNode);
                                       // determino il target della transizione
              currentNodeChildrenList = currentElement->
                                        getElementsByTagName(transitionTarget);
              targetNode = currentNodeChildrenList->item(0);
   
              if ( DOMNode::ELEMENT_NODE == targetNode->getNodeType() )
                targetNodeElement = dynamic_cast<DOMElement*>(targetNode);
    
              currentNodeChildrenList = targetNodeElement->
                                        getElementsByTagName(state);
                                       // se il target è uno state
              if ( currentNodeChildrenList->getLength() > 0 ) 
              {
                targetNode = currentNodeChildrenList->item(0);
   
                if ( DOMNode::ELEMENT_NODE == targetNode->getNodeType() )
                  targetNodeElement = dynamic_cast<DOMElement*>(targetNode);
          
                currentAttribute = targetNodeElement->getAttribute(xmiIDref);
                currentUUID = XMLString::transcode(currentAttribute);
                msiit = statesMapping.find(currentUUID);
          
                if ( msiit != statesMapping.end() )
                  targetStateID = (*msiit).second;
              }

              currentAttribute = sourceNodeElement->getAttribute(xmiIDref);
              currentUUID = XMLString::transcode(currentAttribute);
                            // il source è un initial pseudostate
              if ( initialTransitions.find(currentUUID) != 
                   initialTransitions.end() )
              {
                sourceStateID = (*msiit).second;
                
                if ( targetStateID != (-1) )
                {
                  GetState(sourceStateID)->
                           SetInitialTransition(transitionsIndex);
                  GetState(sourceStateID)->SetInitialSon(targetStateID);           
                  AddTransition(transitionUUID, sourceStateID, targetStateID,
                                triggerParam, guardParam, actionParam, false);

                  if ( (!(EvaluateEvent(triggerParam, sourceStateID, 
                                      transitionsIndex-1, true, microStep))) ||
                       (!(EvaluateEvent(guardParam, sourceStateID, 
                                      transitionsIndex-1, true, microStep))) ||
                       (!(EvaluateAction(actionParam))) )
                  {
                    std::cout << "ERRORE NELLA TRANSIZIONE " << transitionUUID;
                    std::cout << std::endl;
                  }     
                }     
              }     
                            // il source è un choice o junction
              else if ( choicesJunctions.find(currentUUID) != 
                        choicesJunctions.end() )
              {
                if ( targetStateID != (-1) )
                {
                  msviit = cjOutc.find(currentUUID);

                  if ( msviit == cjOutc.end() )
                  {
                    vector<int> trvec;
                    trvec.push_back(transitionsIndex);
                    cjOutc.insert(make_pair(currentUUID, trvec));
                  }
                  else
                    (*msviit).second.push_back(transitionsIndex);
                    
                  AddTransition(transitionUUID, -1, targetStateID, 
                                triggerParam, guardParam, actionParam, false);

                  if ( (!(EvaluateEvent(triggerParam, sourceStateID, 
                                  transitionsIndex-1, true, microStep))) ||
                       (!(EvaluateEvent(guardParam, sourceStateID, 
                                  transitionsIndex-1, true, microStep))) ||
                       (!(EvaluateAction(actionParam))) )
                  {
                    std::cout << "ERRORE NELLA TRANSIZIONE ";
                    std::cout << transitionUUID << std::endl;
                  }     
                }  
              }     
                            // il source è un fork
              else if ( forksOutc.find(currentUUID) != forksOutc.end() )
              {
                msiit = forksOutc.find(currentUUID);
                
                if ( ((*msiit).second == (-1)) && (targetStateID != (-1)) )
                {
                  int fatherID = GetState(targetStateID)->GetAncestor(0);
                  
                  if ( GetState(fatherID)->IsOrthogonal() )
                  {
                    targetStateID = GetState(fatherID)->GetAncestor(0);
                    (*msiit).second = targetStateID;
                    msiit = forksInc.find(currentUUID);
                  
                    if ( (*msiit).second != (-1) )
                    {
                      Transition* trf = GetTransition((*msiit).second);
                      
                      if ( trf->GetTargetState() == (-1) )
                        trf->SetTargetState(targetStateID);
                    }     
                  }     
                }     
              }     
                            // il source è un join
              else if ( joinsOutc.find(currentUUID) != joinsOutc.end() )
              {
                msiit = joinsOutc.find(currentUUID);
                
                if ( ((*msiit).second == (-1)) && (targetStateID != (-1)) )
                {
                  (*msiit).second = targetStateID;
                  msiit = joinsInc.find(currentUUID);
                  
                  if ( (*msiit).second != (-1) )
                  {
                    Transition* trj = GetTransition((*msiit).second);
                    int src = trj->GetSourceState();
                      
                    if ( trj->GetTargetState() ==
                         GetState(src)->GetAncestor(0) ) 
                      trj->SetTargetState(targetStateID);
                  }     
                }     
              }     
            }
          }
        }     
      }            
                       /**       STATE          */
      else if ( XMLString::equals(currentNode->getNodeName(), state) &&
                !(XMLString::equals(currentNode->getNodeName(), stateDot)) &&
                !(XMLString::equals(currentNode->getNodeName(), stateSlash)) &&
                !(transitionsZone) ) 
      {
        // acquisizione nome e UUID
        currentAttribute = currentElement->getAttribute(name);
        currentName = XMLString::transcode(currentAttribute);
          
        currentAttribute = currentElement->getAttribute(xmiID);
        currentUUID = XMLString::transcode(currentAttribute);
        
        // creazione dello stato
        if ( fathersTypes.top() == eAndState ) 
          AddState(currentUUID, currentName, GetState(fathersIDs.top()), true); 
        else if ( (fathersTypes.top() == eOrState) || 
                  (fathersTypes.top() == eRegion) )
          AddState(currentUUID, currentName, GetState(fathersIDs.top()), false);
          
        UpdateStatesMapping(currentUUID, (statesIndex-1));
        DD.UpdateStateNames(currentName, (statesIndex-1));
          
        // acquisizione entry action
        currentNodeChildrenList = currentElement->
                                  getElementsByTagName(entryAction);
        if ( currentNodeChildrenList->getLength() > 0 ) 
        {
          for ( int i=0; i<currentNodeChildrenList->getLength(); i++ )
          {
            childNode = currentNodeChildrenList->item(i);
            fatherNode = childNode->getParentNode();
          
            if ( fatherNode->isSameNode(currentNode) )
            {
              char* entryActionParam = "";
          
              if ( DOMNode::ELEMENT_NODE == childNode->getNodeType() )
                childNodeElement = dynamic_cast<DOMElement*>(childNode);
          
              currentNodeChildrenList = childNodeElement->
                                        getElementsByTagName(action);
              childNode = currentNodeChildrenList->item(0);
   
              if ( DOMNode::ELEMENT_NODE == childNode->getNodeType() )
                childNodeElement = dynamic_cast<DOMElement*>(childNode);
          
              currentAttribute = childNodeElement->getAttribute(name);
              entryActionParam = XMLString::transcode(currentAttribute);
              
              if ( !(EvaluateAction(entryActionParam)) )
              {
                std::cout << "ERRORE NELLA ENTRY ACTION DELLO STATO ";
                std::cout << (statesIndex-1) << std::endl;
              }     
          
              GetState(statesIndex-1)->AddEntryAction(entryActionParam);
            }        
          }        
        }        
        
        // acquisizione exit action
        currentNodeChildrenList = currentElement->
                                  getElementsByTagName(exitAction);
        if ( currentNodeChildrenList->getLength() > 0 ) 
        {
          for ( int i=0; i<currentNodeChildrenList->getLength(); i++ )
          {
            childNode = currentNodeChildrenList->item(i);
            fatherNode = childNode->getParentNode();
          
            if ( fatherNode->isSameNode(currentNode) )
            {
              char* exitActionParam = "";
          
              if ( DOMNode::ELEMENT_NODE == childNode->getNodeType() )
                childNodeElement = dynamic_cast<DOMElement*>(childNode);
          
              currentNodeChildrenList = childNodeElement->
                                        getElementsByTagName(action);
              childNode = currentNodeChildrenList->item(0);
   
              if ( DOMNode::ELEMENT_NODE == childNode->getNodeType() )
                childNodeElement = dynamic_cast<DOMElement*>(childNode);
          
              currentAttribute = childNodeElement->getAttribute(name);
              exitActionParam = XMLString::transcode(currentAttribute);
          
              if ( !(EvaluateAction(exitActionParam)) )
              {
                std::cout << "ERRORE NELLA EXIT ACTION DELLO STATO ";
                std::cout << (statesIndex-1) << std::endl;
              }     

              GetState(statesIndex-1)->AddExitAction(exitActionParam);
            }        
          }        
        }        
        
        // acquisizione deferrable event
        currentNodeChildrenList = currentElement->
                                  getElementsByTagName(deferrableEvent);
        if ( currentNodeChildrenList->getLength() > 0 ) 
        {
          for ( int i=0; i<currentNodeChildrenList->getLength(); i++ )
          {
            childNode = currentNodeChildrenList->item(i);
            fatherNode = childNode->getParentNode();
          
            if ( fatherNode->isSameNode(currentNode) )
            {
              char* deferrableEventParam = "";
          
              if ( DOMNode::ELEMENT_NODE == childNode->getNodeType() )
                childNodeElement = dynamic_cast<DOMElement*>(childNode);
          
              currentNodeChildrenList = childNodeElement->
                                        getElementsByTagName(action);
              childNode = currentNodeChildrenList->item(0);
   
              if ( DOMNode::ELEMENT_NODE == childNode->getNodeType() )
                childNodeElement = dynamic_cast<DOMElement*>(childNode);
          
              currentAttribute = childNodeElement->getAttribute(name);
              deferrableEventParam = XMLString::transcode(currentAttribute);
          
              GetState(statesIndex-1)->AddDeferrableEvent(deferrableEventParam);
            }        
          }        
        }        
        
        // determinazione del tipo di state
        currentNodeChildrenList = currentElement->
                                  getElementsByTagName(region);
        if ( currentNodeChildrenList->getLength() == 1 ) 
        {
          fathersIDs.push(statesIndex-1);
          lastElement = eOrState;
          fathersTypes.push(lastElement);
        }        
        else if ( currentNodeChildrenList->getLength() > 1 ) 
        {
          const XMLCh* currentFather = 0;
          int numberOfRegions = 1;

          regionNode = 0;
          fatherNode = 0;
          fatherNodeElement = 0;
          
          regionNode = currentNodeChildrenList->item(0);
          fatherNode = regionNode->getParentNode();
          fatherNode = fatherNode->getParentNode();
   
          if ( DOMNode::ELEMENT_NODE == fatherNode->getNodeType() )
            fatherNodeElement = dynamic_cast<DOMElement*>(fatherNode);
    
          currentFather = fatherNodeElement->getAttribute(xmiID);

          for ( int i=1; i<(currentNodeChildrenList->getLength()); i++ )
          {
            regionNode = currentNodeChildrenList->item(i);
            fatherNode = regionNode->getParentNode();
            fatherNode = fatherNode->getParentNode();
   
            if ( DOMNode::ELEMENT_NODE == fatherNode->getNodeType() )
              fatherNodeElement = dynamic_cast<DOMElement*>(fatherNode);
    
            if ( XMLString::equals(fatherNodeElement->getAttribute(xmiID), 
                                   currentFather) )
              numberOfRegions++;                     
          } 

          if ( numberOfRegions > 1 )                        
            lastElement = eAndState;
          else
            lastElement = eOrState;
            
          fathersIDs.push(statesIndex-1);
          fathersTypes.push(lastElement);
        }   
      }            
                      /**       PSEUDOSTATE          */
      else if ( XMLString::equals(currentNode->getNodeName(), pseudostate) &&
                !(transitionsZone) ) 
      {
        currentAttribute = currentElement->getAttribute(kind);
        currentKind = XMLString::transcode(currentAttribute);
                                            // INITIAL
        if ( XMLString::equals(currentKind, "initial") )
        {
          DOMNode* initialTransitionNode = 0;
          DOMElement* initialTransitionNodeElement = 0;

          currentNodeChildrenList = currentElement->
                                    getElementsByTagName(transition);
          initialTransitionNode = currentNodeChildrenList->item(0);
   
          if ( DOMNode::ELEMENT_NODE == initialTransitionNode->getNodeType() )
            initialTransitionNodeElement = 
                 dynamic_cast<DOMElement*>(initialTransitionNode);
    
          currentAttribute = initialTransitionNodeElement->
                             getAttribute(xmiIDref);
          currentUUID = XMLString::transcode(currentAttribute);
     
          initialTransitions.insert(make_pair(currentUUID, fathersIDs.top()));
        }     
                                            // DEEP HISTORY
        else if ( XMLString::equals(currentKind, "deepHistory") )
        {
          GetState(fathersIDs.top())->SetDeepHistory(true);   
        }     
                                            // SHALLOW HISTORY
        else if ( XMLString::equals(currentKind, "shallowHistory") )
        {
          GetState(fathersIDs.top())->SetShallowHistory(true);   
        }     
                                            // CHOICE & JUNCTION
        else if ( (XMLString::equals(currentKind, "choice")) ||
                  (XMLString::equals(currentKind, "junction")) )
        {
          currentAttribute = currentElement->getAttribute(xmiID);
          currentUUID = XMLString::transcode(currentAttribute);
          choicesJunctions.insert(currentUUID);
        }     
                                            // FORK
        else if ( XMLString::equals(currentKind, "fork") )
        {
          currentAttribute = currentElement->getAttribute(xmiID);
          currentUUID = XMLString::transcode(currentAttribute);
          forksInc.insert(make_pair(currentUUID, -1));
          forksOutc.insert(make_pair(currentUUID, -1));
        }     
                                            // JOIN
        else if ( XMLString::equals(currentKind, "join") )
        {
          currentAttribute = currentElement->getAttribute(xmiID);
          currentUUID = XMLString::transcode(currentAttribute);
          joinsInc.insert(make_pair(currentUUID, -1));
          joinsOutc.insert(make_pair(currentUUID, -1));
        }     
      }             
                      /**       REGION          */
      else if ( XMLString::equals(currentNode->getNodeName(), region) &&
                !(XMLString::equals(currentNode->getNodeName(), regionDot)) &&
                !(XMLString::equals(currentNode->getNodeName(), regionSlash)) &&
                !(transitionsZone) ) 
      {
        if ( (fathersTypes.top() == eAndState) || 
             (fathersTypes.top() == eRegion) ) 
        {
          currentAttribute = currentElement->getAttribute(name);
          currentName = XMLString::transcode(currentAttribute);
          
          currentAttribute = currentElement->getAttribute(xmiID);
          currentUUID = XMLString::transcode(currentAttribute);
        
          AddState(currentUUID, currentName, GetState(fathersIDs.top()), true);
          fathersIDs.push(statesIndex-1); 
          lastElement = eRegion;
          fathersTypes.push(lastElement);

          UpdateStatesMapping(currentUUID, (statesIndex-1));
          DD.UpdateStateNames(currentName, (statesIndex-1));
        }        
      }             
                    /**       STATE MACHINE          */
      else if ( XMLString::equals(currentNode->getNodeName(), stateMachine) &&
          !(XMLString::equals(currentNode->getNodeName(), stateMachineDot)) &&
          !(XMLString::equals(currentNode->getNodeName(), stateMachineSlash)) ) 
      {
        if ( states.size() == 1 )
        {
          currentAttribute = currentElement->getAttribute(name);
          currentName = XMLString::transcode(currentAttribute);
 
          states[0]->SetName(currentName);
          
          currentAttribute = currentElement->getAttribute(xmiID);
          currentUUID = XMLString::transcode(currentAttribute);
          states[0]->SetUUID(currentUUID);
          
          UpdateStatesMapping(currentUUID, 0);
          DD.UpdateStateNames(currentName, 0);
        }
        else
        {
          std::cout << "l'unica state machine deve essere il top state";
          std::cout << std::endl;
        }
      }
                      /**       REGION TRANSITION         */
      else if ( XMLString::equals(currentNode->getNodeName(), 
                                  regionTransition) &&
                !(XMLString::equals(currentNode->getNodeName(), 
                                    regionTransitionSlash)) ) 
        transitionsZone = true;
                      /**       DIAGRAM ZONE             */
      else if ( XMLString::equals(currentNode->getNodeName(), diagram) ) 
        modelZone = false;
    }
    else             // RISALITA
    {
                     //          da uno stato
      if ( XMLString::equals(currentNode->getNodeName(), state) &&
           !(XMLString::equals(currentNode->getNodeName(), stateDot)) &&
           !(XMLString::equals(currentNode->getNodeName(), stateSlash)) &&
           !(transitionsZone) )
      {
        currentNodeChildrenList = currentElement->
                                  getElementsByTagName(region);
        if ( currentNodeChildrenList->getLength() >= 1 ) 
        {
          fathersIDs.pop();
          fathersTypes.pop();
        }
      }
                     //          da una region
      else if ( XMLString::equals(currentNode->getNodeName(), region) &&
                !(XMLString::equals(currentNode->getNodeName(), regionDot)) &&
                !(XMLString::equals(currentNode->getNodeName(), regionSlash)) &&
                !(transitionsZone) ) 
      {
        if ( fathersTypes.top() == eRegion ) 
        {
          fathersIDs.pop(); 
          fathersTypes.pop();
        }        
      }
                     //          da una region transition
      else if ( XMLString::equals(currentNode->getNodeName(), 
                                  regionTransition) &&
                !(XMLString::equals(currentNode->getNodeName(), 
                                    regionTransitionSlash)) ) 
        transitionsZone = false;
    }
    
    /**       acquisizione di nodi non visitati          */          
    if ( (currentNode->hasChildNodes()) && (!ascending) ) 
      currentNode = currentNode->getFirstChild();
    else if ( currentNode->getNextSibling() != 0 ) 
    {
      currentNode = currentNode->getNextSibling();
      ascending = false;
    }
    else if ( currentNode->getParentNode() != 0 ) 
    {
      currentNode = currentNode->getParentNode();
      ascending = true;
    }
    else { break; }
  }

  builder->release();
  delete parser;
  XMLPlatformUtils::Terminate(); 
  
  // aggiungo alle transizioni entranti in un choice o junction pseudostate
  // le transizioni da esso uscenti nell'apposito vector
  map<string, vector<int> >::const_iterator msvicit;
  map<string, vector<int> >::const_iterator msvicit2;

  vector<int>::const_iterator vicit;
  vector<int>::const_iterator vicit2;

  Transition* trwcd;   // transizione con choice daughters
  
  for ( msvicit=cjInc.begin(); msvicit!=cjInc.end(); msvicit++ )
  {
    msvicit2 = cjOutc.find((*msvicit).first);
    
    if ( msvicit2 != cjOutc.end() )
    {
      for ( vicit=(*msvicit).second.begin(); 
            vicit!=(*msvicit).second.end(); vicit++ )
      {
        trwcd = GetTransition(*vicit);

        for ( vicit2=(*msvicit2).second.begin(); 
              vicit2!=(*msvicit2).second.end(); vicit2++ )
          trwcd->AddChoiceDaughter(*vicit2);
      }
    }
  }
  
  /**             Inizializzazione del data dictionary            */
  DD.SetScenario(_fileScenario);
}
alesnoce è offline   Rispondi citando il messaggio o parte di esso
Old 26-02-2006, 12:02   #8
gaglioppo
Senior Member
 
L'Avatar di gaglioppo
 
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
non riesco a fargli vedere
org.apache.xerces.parsers.DOMParser

come si fa?

ho scaricato i .zip di xerces-2_7_0
ma il file .bat (build.bat) non funziona
allora ho preso tutti i file .jar e li ho messi nella directory lib di java.

Lo so che è un metodo barbaro, ma come devo fare?

grazie
__________________
Nunc est bibendum
gaglioppo è offline   Rispondi citando il messaggio o parte di esso
Old 26-02-2006, 23:32   #9
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
prova nekoHtml(se nn ricordo male basato su xerces)

l'avevo usato tempo fa e nn era male
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2006, 17:03   #10
gaglioppo
Senior Member
 
L'Avatar di gaglioppo
 
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
Quote:
Originariamente inviato da thebol
prova nekoHtml(se nn ricordo male basato su xerces)

l'avevo usato tempo fa e nn era male
Dopo un pò di ricerche ho preso nekoHTML e pure JTidy,
li ho scaricati e mi sto studiando le classi per vedere se fanno ciò che voglio e come lo fanno.

Qualcuno li conosce e sa consigliarmi, magari in base a considerazioni che potrei nn considerare?

Grazie
__________________
Nunc est bibendum
gaglioppo è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
L'intelligenza artificiale ha reso pi&ug...
L'intelligenza artificiale per lo svilup...
Il sistema di verifica dell'identit&agra...
Ora è ufficiale: Samsung sta per ...
Motorola Edge 70 Fusion: ecco le specifi...
8TB a meno di 170€: il richiestissimo Ha...
Il nuovo MacBook 'low cost' arriver&agra...
Pokémon Rosso Fuoco e Verde Fogli...
Risparmiare con le offerte Amazon: weeke...
Gli Xiaomi 17 arrivano a fine febbraio, ...
48.000 Pa a poco più di 100€: la ...
PC più potente, meno spesa: su Amazon to...
Con 2 acquisti si ottiene il 40% di scon...
Blocco VPN in Spagna durante le partite ...
ECOVACS DEEBOT T30C OMNI GEN2 torna a 34...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:39.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v