[
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)