[jdom-interest] Using Xpath and Element GetDocument

MarkW mark.wilson at wilsoncom.de
Tue May 27 00:27:14 PDT 2003


Hi Charles,
in what context do you use doc.getRootElement().getChildren()?

- Mark

> -----Original Message-----
> From: jdom-interest-admin at jdom.org 
> [mailto:jdom-interest-admin at jdom.org] On Behalf Of jaxtrx
> Sent: Monday, May 26, 2003 5:11 PM
> To: Jdom-Interest
> Subject: RE: [jdom-interest] Using Xpath and Element GetDocument
> 
> 
> Now trying to use List jobList = 
> doc.getRootElement().getChildren(); but get
> 
> java.lang.IllegalStateException: Root element not set
>         at org.jdom.Document.getRootElement(Document.java:181)
>         at 
> com.rampantxde.Job.resource.jdomtest.main(jdomtest.java:208)
> 
> Even though I do have a root element, even named root ;)
> 
> 
> <root><job>
> 
>     <input>inputReader</input>
>         <proc>cleanData</proc>
>         <proc>mailMessage</proc>
>         <proc>DisplayDataUnit</proc>
>     <output>outputWriter</output>
> 
>     </job><job>
> 
>     <input>inputReaderStep2</input>
>         <proc>cleanData</proc>
>         <proc>mailMessage</proc>
>     <output>outputWriter</output>
> 
>     </job></root>
> 
> Which is created via the below :
> 
>             XPath jobPath = XPath.newInstance(loadChild);
>             List jobList = jobPath.selectNodes(doc);
>             //System.out.println("getChildUnits:This 
> "+loadChild+" has "+
> jobList.size() +" list items");
>             Iterator i = jobList.iterator();
>             Document tmp=null;
>             Element root = null;
> 
>             while (i.hasNext()) {
>                 Element servlet = (Element) i.next();
>                 String name=servlet.getName();
> //Reports 2 job's added, confirms the XML output
>                 System.out.println("loadChild="+loadChild+" Adding
> "+name+"="+servlet);
>                 if(root==null)
>                     root=new Element("root");
>                 root.addContent((Element)servlet.clone());
>             }
> 
>             if(root==null)
>                 return null;
>             tmp=new Document(root);
> 
> Any ideas on what I did wrong ?  Other methods that normally 
> would report a
> root element not found type message still work fine.
> 
> 
> 
> -----Original Message-----
> From: jdom-interest-admin at jdom.org
> [mailto:jdom-interest-admin at jdom.org]On Behalf Of MarkW
> Sent: Monday, May 26, 2003 8:03 AM
> To: jaxtrx at xde.net
> Cc: Jdom-Interest
> Subject: RE: [jdom-interest] Using Xpath and Element GetDocument
> 
> 
> Hi,
> why not use:
> 
> List jobList = doc.getRootElement().getChildren();
> 
> Also note using an xpath expression like "//job" is relatively slow
> (especially with deep structured trees). Better is "/root/job"
> 
> Greetings,
> Mark
> 
> > -----Original Message-----
> > From: jdom-interest-admin at jdom.org
> > [mailto:jdom-interest-admin at jdom.org] On Behalf Of jaxtrx
> > Sent: Monday, May 26, 2003 2:46 PM
> > To: jdom-interest at jdom.org
> > Subject: [jdom-interest] Using Xpath and Element GetDocument
> >
> >
> > Hi All,
> >
> > Hoping for some help iterating through a list of jobs as
> > shown in the XML
> > and code below.
> > Basically no matter what combination of Xpath filters I use,
> > the Element
> > getDocument method always seems to return the original
> > document text 2 times
> > as there are 2 job nodes.   I'm ideally looking for output
> > similiar to the
> > expected output section with only the single root job per
> > element iterated.
> >
> > I'm assuming that getDocument is tied to the original parent
> > element (root),
> > but is there a way of just getting the child XML or XML
> > specific to the
> > current Element?
> >
> > Thanks much in advance!
> >
> > Charles Havranek
> >
> >
> >
> >
> >             XPath jobPath = XPath.newInstance("//job");
> > //Have tried //job,
> > //root/*, //job//*, //root//job
> >             List jobList = jobPath.selectNodes(doc);
> >             Iterator jobIterator=jobList.iterator();
> >             while(jobIterator.hasNext()){
> >                 Element jobElem=(Element)jobIterator.next();
> >                 XMLOutputter outputter = new XMLOutputter();
> >                 outputter.setExpandEmptyElements(true);
> >                 try{
> >                     outputter.output(jobElem.getDocument(),
> > System.out);
> >                 }catch(Exception e){
> >                     e.printStackTrace();
> >                 }
> >             }
> > Source XML:
> > <?xml version="1.0" encoding="UTF-8"?>
> > <root><job>
> >
> >     <input>inputReader</input>
> >         <proc>cleanData</proc>
> >         <proc>mailMessage</proc>
> >         <proc>DisplayDataUnit</proc>
> >     <output>outputWriter</output>
> >
> >     </job><job>
> >
> >     <input>inputReaderStep2</input>
> >         <proc>cleanData</proc>
> >         <proc>mailMessage</proc>
> >     <output>outputWriter</output>
> >
> >     </job></root>
> >
> > Problem Output :
> > Same as Source XML 2 times.
> >
> > Expected Output :
> > -------------------------JOB 1
> >
> >     <input>inputReader</input>
> >         <proc>cleanData</proc>
> >         <proc>mailMessage</proc>
> >         <proc>DisplayDataUnit</proc>
> >     <output>outputWriter</output>
> >
> >     </job>
> >
> > -------------------------JOB 2
> >
> >     <input>inputReaderStep2</input>
> >         <proc>cleanData</proc>
> >         <proc>mailMessage</proc>
> >     <output>outputWriter</output>
> >
> >     </job>
> >
> > _______________________________________________
> > To control your jdom-interest membership:
> > http://lists.denveronline.net/mailman/options/jdom-interest/yo
> uraddr at yourhost.com
> 
> _______________________________________________
> To control your jdom-interest membership:
> http://lists.denveronline.net/mailman/options/jdom-interest/yo
uraddr at yourhos
t.com

_______________________________________________
To control your jdom-interest membership:
http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@you
rhost.com




More information about the jdom-interest mailing list