[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