[jdom-interest] Using Xpath and Element GetDocument

jaxtrx jaxtrx at xde.net
Tue May 27 09:05:02 PDT 2003


Mark,

Good question - and the key one.  I was using the document object before it
had been setup in my own object instance.  Working like a charm now!

Thanks much,
Charles

-----Original Message-----
From: jdom-interest-admin at jdom.org
[mailto:jdom-interest-admin at jdom.org]On Behalf Of MarkW
Sent: Tuesday, May 27, 2003 2:27 AM
To: jaxtrx at xde.net
Cc: Jdom-Interest
Subject: RE: [jdom-interest] Using Xpath and Element GetDocument


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

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




More information about the jdom-interest mailing list