[ https://issues.apache.org/jira/browse/JXPATH-169?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14038078#comment-14038078 ]
Michele Vivoda commented on JXPATH-169: --------------------------------------- It would probably help if you provide an attached test case (a java file, that compiles, menu MORE/ATTACH FILES) > getChildNodes() has problems in 3rd level of nesting. > ----------------------------------------------------- > > Key: JXPATH-169 > URL: https://issues.apache.org/jira/browse/JXPATH-169 > Project: Commons JXPath > Issue Type: Bug > Affects Versions: 1.2 Final > Environment: Windows, JDK 1.6 > Reporter: Ruben Gerad Mathew > > In the event of using JXPath for reading an XML file, the getChildren() > method is not fetching NodeList after 3rd level, and any structure after 3rd > level return #text (probably scrambled). > An XMI document with an UML structure was parsed, the objective was to > identify all attributes inside a class within a package. The context > retrieves a list of pakages, getChildren() gets the classes embedded within > it and getChildren() on each node on Class gets both the attributes and > operations. > However we are unable to get the tagged values in attributes or look any > deeper than 3 levels. I tried to get the name of the attribute and use xpath > context lookup, but some reason it keeps failing. > Some bit of the code to help. > private void inspectClasses(String handle, Node eachEntryNode){ > try{ > UmlClass umlClass = new UmlClass(); > > umlClass.setClassNamespace(eachEntryNode.getAttributes().getNamedItem("name").getNodeValue()); > > umlClass.setXmiId(eachEntryNode.getAttributes().getNamedItem("xmi.id").getNodeValue()); > > umlClass.setVisibility(eachEntryNode.getAttributes().getNamedItem("visibility").getNodeValue().toString()); > > umlClass.setActiveClass(Boolean.parseBoolean(eachEntryNode.getAttributes().getNamedItem("isActive").getNodeValue().toString())); > > umlClass.setAbstractClass(Boolean.parseBoolean(eachEntryNode.getAttributes().getNamedItem("isAbstract").getNodeValue().toString())); > for(int child =0; > child<eachEntryNode.getChildNodes().getLength();child++){ > > if(eachEntryNode.getChildNodes().item(child).getNodeName().equals("UML:ModelElement.taggedValue")){ > > umlClass.setTaggedValue(getTaggedValues(eachEntryNode.getChildNodes().item(child).getChildNodes())); > > > EventLog.clog(this,"["+umlClass.getClassNamespace()+"] Tagged values > :"+umlClass.getTaggedValue().size()); > } > > if(eachEntryNode.getChildNodes().item(child).getNodeName().equals("UML:Classifier.feature")){ > > umlClass.setUmlAttributes(getClassAttributes(handle, > eachEntryNode.getChildNodes().item(child))); > > EventLog.clog(this,"["+umlClass.getClassNamespace()+"] Tagged values > :"+umlClass.getTaggedValue().size()); > } > listClasses.add(umlClass); > } > } > catch(NullPointerException exp){ > } > catch(Exception exp){ > ExceptionLog.clog(this, "Problem validating > nodes! Error: "+exp.getMessage()); > } > } > public List<UmlAttribute> getClassAttributes(String handle, Node node){ > List<UmlAttribute> classAttributes = new > ArrayList<UmlAttribute>(); > > int child, y; > try{ > Document document=(Document)parsedDocs.get(handle); > JXPathContext context = > JXPathContext.newContext(document); > context.setLenient(true); > NodeList childNodes = node.getChildNodes(); > for(child =0; > child<childNodes.getLength();child++){ > > if(childNodes.item(child).getNodeName().toString().equals("UML:Attribute")){ > Node thisNode = > childNodes.item(child); > NodeList listNodes > =childNodes.item(child).getChildNodes(); > //List entries= > context.selectNodes("//UML:Attribute"); //this was a out of the way attempt > to get inside the next level of nested class attribute tag values > EventLog.clog(this, > "^^^^^^^^^^^^^^^ > "+thisNode.getAttributes().getNamedItem("name").getNodeValue().toString()); > > > locateAttribute(thisNode.getAttributes().getNamedItem("name").getNodeValue().toString(), > listNodes); // unabale to iterate listNodes children. 3rd-4th level missing > values and prints only #text as result. > } > //EventLog.clog(this, "*************** > "+childNodes.item(child).getNodeName().toString()); > > } > }catch(Exception exp){ > ExceptionLog.clog(this,"Problem orgnaizing namespace > structure"+exp.getMessage()); > } > return classAttributes; > } -- This message was sent by Atlassian JIRA (v6.2#6252)