J'essaye actuellement d'écrire un simple analyseur pour certains fichiers XMI (généré à partir d'un diagramme UML) mais je rencontre des problèmes lorsque j'essaie d'extraire le xmi.idref cible de cet extrait de code (je veux récupérer les éléments connectés une activité donnée, j'ai réussi à récupérer tous les bords entrants/sortants):Java DOM Parser: XMI - Inline Tag?
<UML2:ActivityEdge xmi.id = 'I6bf577d1m1387a6c0ea1mm7dcb' visibility = 'public' is Specification = 'false'>
<UML2:ActivityEdge.target>
<UML2:CallAction xmi.idref = 'I6bf577d1m1387a6c0ea1mm7dda'/>
</UML2:ActivityEdge.target>
mon problème est que lorsque je tente d'extraire le UML2: CallAction, mon programme ne détecte pas comme un nœud d'élément, mais plutôt comme un nœud de texte, qui est par ailleurs vide. Voici un échantillon de ce que je fais:
Element edge = searchById(doc,"UML2:ActivityEdge",id);
Element group = (Element) edge.getElementsByTagName("UML2:ActivityEdge.target").item(0);
Node target = group.getChildNodes().item(0);
Element targetRef = (Element) target;
Element t = searchById(doc,targetRef.getNodeName(),targetRef.getAttribute("xmi.idref"));
nameList.add(t.getAttribute("name"));
La méthode searchById travaille (je l'utilise dans différentes parties de mon code), mais si vous pensez que ce pourrait être le problème, je vais le poster. Notez que j'utilise getChildNodes plutôt que getElementsByTagName car la cible de ce bord n'est peut-être pas toujours une activité (une jointure XOR/Merge Node par exemple). L'erreur exacte est:
com.sun.org.apache.xerces.internal.dom.DeferredTextImpl cannot be cast to org.w3c.dom.Element
Lorsque je tente de lancer « cible » à Element ... Je suppose que cela provient du fait qu'il est une balise « en ligne », mais je ne sais pas comment la traiter, être un débutant à l'analyse syntaxique ...
Merci pour votre aide,
Hervé
Edit: J'ai essayé en remplaçant les GetChildNodes par getElementsByTagName et il semble fonctionner ... Cependant, si quelqu'un pouvait corriger le code ci-dessus ou au moins expliquer pourquoi il ne fonctionnera pas correctement, que woul d être génial.
Merci, juste ce que je n'ai pas compris ... Une boucle rapide a résolu mes problèmes! – anonymous2339901