My appologies for not being clarify my intention earlier. I am
trying to identify a element in the DOM using XPath and replace
it with new element.
I have realized that how dumb I am that I could get help a lot
sooner and make everyone's life easier as well.
Your "detach" suggestion will work for what I need. Then how
can I add a new element at the same location where we detach
the old element, i.e., kinda replacing an old element with a
new element. Thank you.
Regards,
Pae
> Are you just trying to filter the hierachy or find the elements?
>
> Perhaps if you tell us more about what you need instead of trying to
> solve a piece of the puzzle we could help more. The first option I
> showed you is probably the one you should use and just create a new root
> element called Patient and add the nodes that come back from the
> select to it to fulfill your filtering.
>
> Sorry I could not be of more help, but, XPath returns matching nodes.
> Unfortunately Patient is now seen as a peer to Age and Gender. Using
> "/*/*[local-name()!='ContactInfo']" will return the nodes under Patient.
>
> Another option is to simply delete ContactInfo once it is found. Do a
> selectNodes on "/*/*[local-name()='ContactInfo']" and then remove the
> items by "detach()" so they no longer show up in the parent. Then the
> root element would no longer have ContactInfo as a child.
>
> Try this out
> //...
> public static void main(String[] args) {
> try {
> System.out.println("starting main...");
>
> SAXReader reader = new SAXReader();
> Document document = reader.read(
> new File("patient_records.xml" ));
> Element root = document.getRootElement();
>
> System.out.println("xml=\n"+root.asXML());
> List contactInfoList = root.selectNodes("//ContactInfo");
> Object array[] = contactInfoList.toArray();
> Element item=null;
> for (int i =0; i < array.length; i++ ){
> item=(Element) array[i];
> item.detach();
> }
> System.out.println("xml=\n"+root.asXML());
> }
> catch (Exception ex) {
> ex.printStackTrace();
> }
> finally {
> System.out.println("leaving main...");
> }
> }
> //...
>
> Not sure why, but the whitespace from the asXML on the root the second
> time seems to have some extra <CR> embedded. Anyone know why?
>
> Best Wishes,
> Dave
>
>
>
> Pae Choi wrote:
> > Dave,
> >
> > With the XPE tool(under the Matching Nodes tab), it returns as follows:
> >
> > <Patient>
> > <Age>
> > <Gender>
> >
> >
> > Both with Xalan and Jaxen with DOM4J, it returns as follows:
> >
> > <Patient>
> > <Age>39</Age>
> > <Gender>Female</Gender>
> > <ContactInfo>
> > <PhoneNumber>123-456-7890</PhoneNumber>
> > <EmailAddress>[EMAIL PROTECTED]</EmailAddress>
> > </ContactInfo>
> > </Patient>
> > <Age>39</Age>
> > <Gender>Female</Gender>
> >
> > More comments? Thank you.
> >
> > Regards,
> >
> >
> > Pae
> >
> >
> >
> > ----- Original Message -----
> > From: "David D. Lucas" <[EMAIL PROTECTED]>
> > To: "Pae Choi" <[EMAIL PROTECTED]>
> > Cc: <[EMAIL PROTECTED]>
> > Sent: Monday, November 18, 2002 5:36 AM
> > Subject: Re: [dom4j-user] XPath result from a DOM and the Rest of DOM
> >
> >
> >
> >>So, what you really want is:
> >>"//*[not( ancestor-or-self::ContactInfo ) ]"
> >>Try that out and see what you get.
> >>
> >>Enjoy!
> >>Dave
> >>
> >>
> >>Pae Choi wrote:
> >>
> >>>Dave,
> >>>
> >>>It is partially working though, that was a nice XPath you gave. I
> >>>tested both Jaxen with DOM4J and XPE(seems like XPE also uses
> >>>Jaxen as well), the result was same as follows:
> >>>
> >>><Age>38</Age>
> >>><Gender>Female</Gender>
> >>>
> >>>It returns other sibing nodes excluding the <ContactInfo> element.
> >>>That's I wanted to see in that level, but I also need the other
> >>>elements, including their parent node, e.g., <Patient> element. To
> >>>wit, the result should be as follows:
> >>>
> >>><Patient>
> >>> <Age>38</Age>
> >>> <Gender>Female</Gender>
> >>></Patient>
> >>>
> >>>Any more comments? Thank you.
> >>>
> >>>Regards,
> >>>
> >>>
> >>>Pae
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>----- Original Message -----
> >>>From: "David D. Lucas" <[EMAIL PROTECTED]>
> >>>To: "Pae Choi" <[EMAIL PROTECTED]>
> >>>Cc: "Benjamin Kopic" <[EMAIL PROTECTED]>;
> >>><[EMAIL PROTECTED]>
> >>>Sent: Sunday, November 17, 2002 5:37 PM
> >>>Subject: Re: [dom4j-user] XPath result from a DOM and the Rest of DOM
> >>>
> >>>
> >>>
> >>>
> >>>>Try the XPath syntax "/*/*[local-name()!='ContactInfo']" .
> >>>>That should give you what you want. I verified it with XPE, but have
> >>>>not tried it on DOM4J.
> >>>>
> >>>>Let me know if it works. :-)
> >>>>Later,
> >>>>Dave
> >>>>
> >>>>
> >>>>Pae Choi wrote:
> >>>>
> >>>>
> >>>>>Thank you for your reply as well as code snippet. But that's not
> >>>>
> >>>exactlly
> >>>
> >>>
> >>>>>what I was looking for.
> >>>>>
> >>>>>My applogies if I did not explained well in my prevous message. The
> >>>>>code snippet in your message will be able to get the <ContactInfo>
> >>>>>subemelement fine. And I have no problem to getting that.
> >>>>>
> >>>>>My question was to get the rest of XML DOM, excluding the prviously
> >>>>>selected sublelement, <ContactInfo>. To wit, I am looking for a
simple
> >>>>>way to get the result without parsing the XML document by excluding
> >>>>>the previously selected subelement. The result I am expecting to get
> >>>>>is as follows:
> >>>>>
> >>>>>Initial XML:
> >>>>>/<Patient>/
> >>>>>/ <Age>39</Age>///
> >>>>>/ <Gender>Female</Gender>///
> >>>>>/ <ContactInfo>///
> >>>>>/ <PhoneNumber>123-456-7890</PhoneNumber>///
> >>>>>/ <EmailAddress>[EMAIL PROTECTED]</EmailAddress>///
> >>>>>/ </ContactInfo>///
> >>>>>/</Patient>///
> >>>>>The result XML:
> >>>>>/<Patient>/
> >>>>>/ <Age>39</Age>///
> >>>>>/ <Gender>Female</Gender>///
> >>>>>/</Patient>///
> >>>>>Thank you.
> >>>>>
> >>>>>Any more comments?
> >>>>>
> >>>>>Regards,
> >>>>>
> >>>>>
> >>>>>Pae
> >>>>>
> >>>>>
> >>>>>
> >>>>> ----- Original Message -----
> >>>>> *From:* Benjamin Kopic <mailto:[EMAIL PROTECTED]>
> >>>>> *To:* Pae Choi <mailto:[EMAIL PROTECTED]>
> >>>>> *Cc:* [EMAIL PROTECTED]
> >>>>> <mailto:[EMAIL PROTECTED]>
> >>>>> *Sent:* Sunday, November 17, 2002 4:07 AM
> >>>>> *Subject:* Re: [dom4j-user] XPath result from a DOM and the Rest
of
> >>>>
> >>>DOM
> >>>
> >>>
> >>>>> If I understand you correctly, the following will return <Patient>
> >>>>> element:
> >>>>>
> >>>>>
> >>>>> SAXReader reader = new SAXReader();
> >>>>> Document document = reader.read( new File(
> >>>>
> >>>"patient_records.xml" ) );
> >>>
> >>>
> >>>>> Element contactInfo = document.selectSingleNode( "//ContactInfo",
> >>>>> "." );
> >>>>> Element patient = contactInfor.getParent();
> >>>>>
> >>>>>
> >>>>> Then you can use the Node API to traverse the <Patient> element
> >>>>> returned.
> >>>>>
> >>>>> Also, if <Patient> is the root element, then you can do the
> >>>>
> >>>following:
> >>>
> >>>
> >>>>> SAXReader reader = new SAXReader();
> >>>>> Document document = reader.read( new File(
> >>>>
> >>>"patient_records.xml" ) );
> >>>
> >>>
> >>>>> Element patient = document.getRootElement();
> >>>>>
> >>>>>
> >>>>>
> >>>>> Best regards
> >>>>>
> >>>>> Ben
> >>>>>
> >>>>>
> >>>>> On Sat, 2002-11-16 at 23:52, Pae Choi wrote:
> >>>>>
> >>>>> /Say we have an XML document as follows:///
> >>>>> ////
> >>>>> /<Patient>///
> >>>>> / <Age>39</Age>///
> >>>>> / <Gender>Female</Gender>///
> >>>>> / <ContactInfo>///
> >>>>> / <PhoneNumber>123-456-7890</PhoneNumber>///
> >>>>> / <EmailAddress>[EMAIL PROTECTED]</EmailAddress>///
> >>>>> / </ContactInfo>///
> >>>>> /</Patient>///
> >>>>> ////
> >>>>> /And we use the XPath to only get the <ContactInfo>, e.g.,///
> >>>>> /"//ContactInfo" which should get the result as follows;///
> >>>>> ////
> >>>>> / <ContactInfo>///
> >>>>> / <PhoneNumber>123-456-7890</PhoneNumber>///
> >>>>> / <EmailAddress>[EMAIL PROTECTED]</EmailAddress>///
> >>>>> / </ContactInfo>///
> >>>>> ////
> >>>>> /My question is:///
> >>>>> ////
> >>>>> /[Q] Is there way to get the rest of XML document in a
> >>>>
> > simple///
> >
> >>>>> / way. The rest of XML document should be as follows;///
> >>>>> ////
> >>>>> /<Patient>///
> >>>>> / <Age>39</Age>///
> >>>>> / <Gender>Female</Gender>///
> >>>>> /</Patient>///
> >>>>> ////
> >>>>> /Any comments? Thank you.///
> >>>>> ////
> >>>>> /Regards,///
> >>>>> ////
> >>>>> ////
> >>>>> /Pae///
> >>>>> ////
> >>>>> ////
> >>>>> ////
> >>>>>
> >>>>>--
> >>>>>benjamin kopic
> >>>>>m: +44 (0)780 154 7643
> >>>>>t: +44 (0)20 7794 3090
> >>>>>e: [EMAIL PROTECTED]
> >>>>>w: http://www.panContext.com/
> >>>>>
> >>>>
> >>>>
> >>>>--
> >>>>
> >>>>+------------------------------------------------------------+
> >>>>| David Lucas mailto:[EMAIL PROTECTED] |
> >>>>| Lucas Software Engineering, Inc. (740) 964-6248 Voice |
> >>>>| Unix,Java,C++,CORBA,XML,EJB (614) 668-4020 Mobile |
> >>>>| Middleware,Frameworks (888) 866-4728 Fax/Msg |
> >>>>+------------------------------------------------------------+
> >>>>| GPS Location: 40.0150 deg Lat, -82.6378 deg Long |
> >>>>| IMHC: "Jesus Christ is the way, the truth, and the life." |
> >>>>| IMHC: "I know where I am; I know where I'm going." <>< |
> >>>>+------------------------------------------------------------+
> >>>>
> >>>>Notes: PGP Key Block=http://www.lse.com/~ddlucas/pgpblock.txt
> >>>>IMHO="in my humble opinion" IMHC="in my humble conviction"
> >>>>All trademarks above are those of their respective owners.
> >>>>
> >>>>
> >>>
> >>>
> >>
> >>--
> >>
> >>+------------------------------------------------------------+
> >>| David Lucas mailto:[EMAIL PROTECTED] |
> >>| Lucas Software Engineering, Inc. (740) 964-6248 Voice |
> >>| Unix,Java,C++,CORBA,XML,EJB (614) 668-4020 Mobile |
> >>| Middleware,Frameworks (888) 866-4728 Fax/Msg |
> >>+------------------------------------------------------------+
> >>| GPS Location: 40.0150 deg Lat, -82.6378 deg Long |
> >>| IMHC: "Jesus Christ is the way, the truth, and the life." |
> >>| IMHC: "I know where I am; I know where I'm going." <>< |
> >>+------------------------------------------------------------+
> >>
> >>Notes: PGP Key Block=http://www.lse.com/~ddlucas/pgpblock.txt
> >>IMHO="in my humble opinion" IMHC="in my humble conviction"
> >>All trademarks above are those of their respective owners.
> >>
> >>
> >>
> >>
> >>-------------------------------------------------------
> >>This sf.net email is sponsored by: To learn the basics of securing
> >>your web site with SSL, click here to get a FREE TRIAL of a Thawte
> >>Server Certificate: http://www.gothawte.com/rd524.html
> >>_______________________________________________
> >>dom4j-user mailing list
> >>[EMAIL PROTECTED]
> >>https://lists.sourceforge.net/lists/listinfo/dom4j-user
> >
> >
>
>
> --
>
> +------------------------------------------------------------+
> | David Lucas mailto:[EMAIL PROTECTED] |
> | Lucas Software Engineering, Inc. (740) 964-6248 Voice |
> | Unix,Java,C++,CORBA,XML,EJB (614) 668-4020 Mobile |
> | Middleware,Frameworks (888) 866-4728 Fax/Msg |
> +------------------------------------------------------------+
> | GPS Location: 40.0150 deg Lat, -82.6378 deg Long |
> | IMHC: "Jesus Christ is the way, the truth, and the life." |
> | IMHC: "I know where I am; I know where I'm going." <>< |
> +------------------------------------------------------------+
>
> Notes: PGP Key Block=http://www.lse.com/~ddlucas/pgpblock.txt
> IMHO="in my humble opinion" IMHC="in my humble conviction"
> All trademarks above are those of their respective owners.
>
>
-------------------------------------------------------
This sf.net email is sponsored by: To learn the basics of securing
your web site with SSL, click here to get a FREE TRIAL of a Thawte
Server Certificate: http://www.gothawte.com/rd524.html
_______________________________________________
dom4j-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dom4j-user