Hi Andreas,
thanks a lot for your help - i will try out your code today! Also thanks the
all the other for the fast replys.
-------- Original-Nachricht --------
> Datum: Wed, 17 Dec 2008 11:40:00 +0100
> Von: "BEEKER, ANDREAS (Allianz Deutschland, externer Mitarbeiter)"
> <[email protected]>
> An: "[email protected]" <[email protected]>
> Betreff: Re: parse a part of xml
> Hi Eugen,
>
> we use xml beans within streaming xml processing and had a similar
> problem.
> The helper class simply throws away the elements until it reads the given
> tag.
> When its on the element, the xml will be copied into a stringbuffer which
> can be then parsed by your xml bean.
> For stream processing we are using woodstox.
> (I hope there are not to many errors into following code as I only adapted
> it
> straight from our sources without testing ...)
>
> Best wishes,
> Andreas.
>
>
>
> XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
> XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
> StringWriter sw = new StringWriter();
>
> XmlOptions xo = new XmlOptions();
> xo.setLoadStripWhitespace();
> xo.setValidateTreatLaxAsSkip();
> xo.setSaveOuter();
> ArrayList validationErrors = new ArrayList();
> xo.setErrorListener(validationErrors);
>
> XMLEventReader xmlReader = xmlInputFactory.createXMLEventReader(<your
> inputstream>);
> XMLEventWriter xmlWriter = xmlOutputFactory.createXMLEventWriter(sw);
>
>
> // skip pragma/prefix
> StaxHelper.readUntilElement(xmlReader, xmlWriter, "ProjectDataSet");
>
> // read element
> StaxHelper.readElement(xmlReader, xmlWriter, sw, "ProjectDataSet");
>
> ParentOfProjectDataSetType popdst =
> ParentOfProjectDataSetType.Factory.parse(sw.toString(), xo);
> ProjectDataSetType pdst = popdst.getProjectDataSet();
>
>
>
>
>
> public class StaxHelper {
> public static XMLEvent readUntilElement(XMLEventReader xmlReader,
> XMLEventWriter xmlWriter, String name)
> throws XMLStreamException, NpsAppError {
> XMLEvent event = null;
>
> for (boolean isFirstElement = true; xmlReader.hasNext();
> isFirstElement = false) {
> event = xmlReader.peek();
> if (event.isStartElement()) {
> if (!isFirstElement &&
> name.equals(((StartElement)event).getName().getLocalPart())) {
> if (xmlWriter != null)
> xmlWriter.flush();
> return event;
> }
> }
> event = xmlReader.nextEvent();
> if (xmlWriter != null) xmlWriter.add(event);
> if (event.isEndElement() &&
> name.equals(((EndElement)event).getName().getLocalPart())) {
> if (xmlWriter != null) xmlWriter.flush();
> return event;
> }
> }
>
> // throws exception after last element
> throw new NpsAppError(
> NpsErrorConst.ERROR_ELEMENT_NOT_FOUND,
> NpsErrorConst.XML_SUBSYSTEM,
> name);
> }
>
> public static void readElement(XMLEventReader xmlReader,
> XMLEventWriter xmlWriter, StringWriter sw, String name)
> throws XMLStreamException, NpsAppError {
> StringBuffer sb = sw.getBuffer();
>
> XMLEvent evt = xmlReader.peek();
> boolean isAtElement = (evt.isStartElement() &&
> name.equals(((StartElement)evt).getName().getLocalPart()));
>
> if (!isAtElement) {
> readUntilElement(xmlReader, xmlWriter, name); /*
> search start */
> }
> xmlWriter.flush();
> sb.setLength(0);
>
> readUntilElement(xmlReader, xmlWriter, name); /* search
> end */
> xmlWriter.flush();
>
> int startTagIdx = sb.indexOf("<");
> if (startTagIdx > 0) sb.delete(0, startTagIdx);
> }
> }
>
>
>
>
> -----Ursprüngliche Nachricht-----
> Von: Eugen Okon [mailto:[email protected]]
> Gesendet: Dienstag, 16. Dezember 2008 16:21
> An: [email protected]
> Betreff: Re: parse a part of xml
>
> Hi Andy,
>
> my interactions with the web service are limited to very basic operations,
> so i do not use any special framework ecxept apache commons. I get the
> response as an InputStream. Thats the reason i am search for a way to skip a
> part of the response. Even in the case i could get just the body of the soap
> message there would be some "pre-"tags generated by the Microsoft Project
> Web Service which i do not want to model as java objects. i have seen that
> the parse method has an additional parameter : XMLOptions, but i can't find
> out whether its helpfull for my aim or not. There should be a possibility
> to tell the parse which node shoult be treated as root - or not? I have
> search for similar problems in the mailinglist but i can't find anything. I
> think there should be more users which need this functionality or is my
> approach just wrong :)?
> -------- Original-Nachricht --------
> > Datum: Tue, 16 Dec 2008 08:59:41 -0600
> > Von: Andy Putnins <[email protected]>
> > An: [email protected]
> > Betreff: Re: parse a part of xml
>
> > How are you handing the SOAP protocol messages? I have done this in the
> > past by utilizing AXIS
> > running in a Tomcat container to decode the SOAP messages. AXIS includes
> a
> > wsdl2java utility
> > to generate server-side stubs and implementation classes. Then you can
> use
> > XMLBeans to process the
> > contents of the SOAP messages.
> >
> > - Andy
> >
> > On Tue, 16 Dec 2008 08:55:15 +0100 "Eugen Okon" wrote:
> > > Hi Jacob,
> > > thanks a lot for your answer!
> > > There is no problem to get the values of the projectdataset, in the
> > case that i copy/p
> > aste the
> > > <ProjectDataSet>
> > > Information I need!!!!
> > > </ProjectDataSet>
> > > part to a new file and use it. The exception is caused (in my
> opinion)
> > because the roo
> > t element of the doc i am trying to parse is <soap:envelope> and
> not
> > <ProjectDataSet
> > >. What i am searching for is a possibility to tell the parser to
> > skip all tags till
> > <ProjectDataSet>. The Exception i get is:
> > >
> > > error: The document is not a
> > projectdata...@http://schemas.microsoft.com/office/projec
> > t/server/webservices/ProjectDataSet/: document element mismatch got
> > envel...@http://
> > schemas.xmlsoap.org/soap/envelope/
> > > at
> >
> org.apache.xmlbeans.impl.store.Locale.verifyDocumentType(Locale.java:458)
> > > at
> > org.apache.xmlbeans.impl.store.Locale.autoTypeDocument(Locale.java:363)
> > >
> > > with best regards
> > > Eugen
> > > -------- Original-Nachricht --------
> > > > Datum: Mon, 15 Dec 2008 09:15:22 -0800
> > > > Von: "Jacob Danner" <[email protected]>
> > > > An: [email protected]
> > > > Betreff: Re: parse a part of xml
> > >
> > > > Hi Eugen,
> > > > Are you having troubles getting the value of the projectdataset
> > > > element or are you just getting an exception when you are trying to
> > > > parse it?
> > > > Is there a projectDatasetType Class available? Have you tried that?
> > > > What is the exception you are seeing?
> > > > -jacobd
> > > >
> > > > On Mon, Dec 15, 2008 at 1:41 AM, Eugen Okon <[email protected]>
> wrote:
> > > > > Hello,
> > > > > i am new to xmlbeans, so maybe my question is a kind of "basics"
> > for the
> > > > framework. I am writing an application which communicates with Ms
> > Project
> > > > PSI Web Services. The application gets a SOAP response from Ms
> > Project. The
> > > > structure of this response is described below:
> > > > >
> > > > > <soap:envelope>
> > > > > …..
> > > > > <soap:body>
> > > > > <ReadProjectResponse>
> > > > > …
> > > > > <ProjectDataSet>
> > > > > Information I need!!!!
> > > > > </ProjectDataSet>
> > > > > …
> > > > > <ReadProjectResponse>
> > > > > </soap:body>
> > > > > </soap:envelope>
> > > > >
> > > > > Ok so now I can finally describe the problem. I have a xsd schema
> > which
> > > > models the structure of <ProjectDataSet>. From these xsd I've
> > generated
> > > > java code with xmlbeans's ant task. Now I am searching for an
> elegant
> > > > possibility to parse this kind of responses. This means
> > > > ProjectDataSetDocument.Factory.parse(is); should parse the
> > inputstream beginning wit
> > h the
> > > > <ProjectDataSet>. In other cases I am understandably getting an
> > exception. I hope
> > > > someone can help me solving this problem.
> > > > >
> > > > > Eugen
> > > > >
> > > > > --
> > > > > Psssst! Schon vom neuen GMX MultiMessenger gehört? Der kann`s
> mit
> > > > allen: http://www.gmx.net/de/go/multimessenger
> > > > >
> > > > >
> > ---------------------------------------------------------------------
> > > > > To unsubscribe, e-mail: [email protected]
> > > > > For additional commands, e-mail: [email protected]
> > > > >
> > > > >
> > > >
> > > >
> ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: [email protected]
> > > > For additional commands, e-mail: [email protected]
> > >
> > > --
> > > Sensationsangebot verlängert: GMX FreeDSL - Telefonanschluss + DSL
> > > für nur 16,37 Euro/mtl.!*
> http://dsl.gmx.de/?ac=OM.AD.PD003K1308T4569a
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [email protected]
> > > For additional commands, e-mail: [email protected]
> > >
> >
> > - Andy
> > ________________________________________________________________
> > Andris Putnins, Principal
> > Lett Engineering phone: (847) 997-0002
> > 300 Bramble Lane fax: (847) 550-0633
> > Deer Park, IL 60011 email: [email protected]
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
>
> --
> Psssst! Schon vom neuen GMX MultiMessenger gehört? Der kann`s mit allen:
> http://www.gmx.net/de/go/multimessenger
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
--
Psssst! Schon vom neuen GMX MultiMessenger gehört? Der kann`s mit allen:
http://www.gmx.net/de/go/multimessenger
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]