Parsing a StringBuffer

Hello,
I have a file which I read character by character and stored in a StringBuffer. Hereunder is a sample from the final StringBuffer. What I require is to extract the links marked in bold. What we know is that the links begin with href=" and end with *"* but can't figure out how to extract them.
</td></tr></table></td></tr><tr><td><img height="1" width="1" alt=""></td></tr></table><p><a href="*http://en.wikipedia.org/wiki/John_F._Kennedy*"><b>John F</b>. <b>Kennedy</b> - Wikipedia, the free encyclopedia</a><table cellpadding="0" cellspacing="0" border="0"><tr><td class="j"><font size="-1"><b>John Fitzgerald</b> "Jack" <b>Kennedy</b> (May 29, 1917 ? November 22, 1963), often <br> referred to by his initials <b>JFK</b>, was the 35th President of the United States, <br> <b>...</b><br><font color="green">http://en.wikipedia.org/wiki/John_F._Kennedy - 413k</font> - <a href="http://209.85.129.132/search?q=cache:w3TXQtgRchEJ:http://en.wikipedia.org/wiki/John_F._Kennedy+john+fitzgerald+kennedy&hl=mt&ct=clnk"><font color="#7777cc">Cached</font></a> - <a href="/search?q=related:http://en.wikipedia.org/wiki/John_F._Kennedy&hl=mt"><font color="#7777cc">Pa&#289;ni simili</font></a></font></td></tr></table></p><blockquote><p><a href="*http://en.wikipedia.org/wiki/John_F._Kennedy_assassination*"><b>John F</b>. <b>Kennedy</b> assassination - Wikipedia, the free encyclopedia</a><table cellpadding="0" cellspacing="0" border="0"><tr><td class="j"><font size="-1">The assassination of <b>John F</b>. <b>Kennedy</b>, the thirty-fifth President of the United <br> States, took place on Friday, November 22, 1963, in Dallas, Texas, <b>...</b><br><font color="green">http://en.wikipedia.org/wiki/John_F._Kennedy_assassination - 205k</font> - <a href="http://209.85.129.132/search?q=cache:nX6q3zyzGIcJ:http://en.wikipedia.org/wiki/John_F._Kennedy_assassination+john+fitzgerald+kennedy&hl=mt&ct=clnk"><font color="#7777cc">Cached</font></a> - <a href="/search?q=related:http://en.wikipedia.org/wiki/John_F._Kennedy_assassination&hl=mt"><font color="#7777cc">Pa&#289;ni simili</font></a></font></td></tr></table></p></blockquote><p><a href="*http://www.whitehouse.gov/about/presidents/johnfkennedy*"><b>John F</b>. <b>Kennedy</b> | The White House</a><table cellpadding="0" cellspacing="0" border="0"><tr><td class="j"><font size="-1">Short biography from the official White House site.<br><font color="green">http://www.whitehouse.gov/about/presidents/johnfkennedy - 38k</font> - <a href="http://209.85.129.132/search?q=cache:RnxSjWi7Hw4J:http://www.whitehouse.gov/about/presidents/johnfkennedy+john+fitzgerald+kennedy&hl=mt&ct=clnk"><font color="#7777cc">Cached</font></a> - <a href="/search?q=related:http://www.whitehouse.gov/about/presidents/johnfkennedy&hl=mt"><font color="#7777cc">Pa&#289;ni simili</font></a></font></td></tr></table></p><p><table style="width:auto" border="0" cellpadding="0" cellspacing="0"><tr><td valign="top"><a href="http://www.youtube.com/watch?v=i5cCzDbtVnM"><img src="http://img.youtube.com/vi/i5cCzDbtVnM/default.jpg?h=60&w=80&sigh=__ASeFXKBGE0AXx2XPySrR07O9yIY=" width="80" height="60" border="1" alt=""></a></td><td width="7"> </td><td valign="top"><a href="http://www.youtube.com/watch?v=i5cCzDbtVnM">Discovery <b>JFK</b> assassination</a><br><font size="-1">the <b>kennedy</b> assassination film<br><font color="#666666">1 min 15 sec - <nobr><img src="/images/sy-star-on.gif" width="10" height="9" border="0"></nobr><nobr><img src="/images/sy-star-on.gif" width="10" height="9" border="0"></nobr><nobr><img src="/images/sy-star-on.gif" width="10" height="9" border="0"></nobr><nobr><img src="/images/sy-star-on.gif" width="10" height="9" border="0"></nobr><nobr><img src="/images/sy-star-half.gif" width="10" height="9" border="0"></nobr></font><br><font color="green">http://www.youtube.com/watch%3Fv%3Di5cCzDbtVnM</font></font></td></tr></table></p><p><table style="width:auto" border="0" cellpadding="0" cellspacing="0"><tr><td valign="top"><a href="http://www.youtube.com/watch?v=BLmiOEk59n8"><img src="http://img.youtube.com/vi/BLmiOEk59n8/default.jpg?h=60&w=80&sigh=__jbbmpQGe0kIZt3uuOT9de5Mbzhk=" width="80" height="60" border="1" alt=""></a></td><td width="7"> </td><td valign="top"><a href="http://www.youtube.com/watch?v=BLmiOEk59n8">President <b>Kennedy</b> 1961 Inaugural Address</a><br><font size="-1">www.c-spanarchives.org President <b>Kennedy</b> delivered his inaugural address on January 20, 1961.<br><font color="#666666">14 min - <nobr><img src="/images/sy-star-on.gif" width="10" height="9" border="0"></nobr><nobr><img src="/images/sy-star-on.gif" width="10" height="9" border="0"></nobr><nobr><img src="/images/sy-star-on.gif" width="10" height="9" border="0"></nobr><nobr><img src="/images/sy-star-on.gif" width="10" height="9" border="0"></nobr><nobr><img src="/images/sy-star-on.gif" width="10" height="9" border="0"></nobr></font><br><font color="green">http://www.youtube.com/watch%3Fv%3DBLmiOEk59n8</font></font></td></tr></table></p><p><a href="*http://www.jfklibrary.org/*">Home - <b>John F</b>. <b>Kennedy</b> Presidential Library & Museum</a><table cellpadding="0" cellspacing="0" border="0"><tr><td class="j"><font size="-1">Upcoming events, highlights and breaking news at the <b>John F</b>. <b>Kennedy</b> <br> Presidential Library and Museum.<br><font color="green">http://www.jfklibrary.org/ - 27k</font> - <a
Can you suggest me an approach to do this without using any XML parsers?
Thanks.
Edited by: alley on Nov 8, 2009 3:56 AM

alley wrote:
Hello,
I have a file which I read character by character and stored in a StringBuffer. Hereunder is a sample from the final StringBuffer. What I require is to extract the links marked in bold. What we know is that the links begin with href=" and end with *"* but can't figure out how to extract them.Take a look at the indexOf and [substring()|http://java.sun.com/javase/6/docs/api/java/lang/StringBuffer.html#substring(int,%20int)] methods of the StringBuffer class. Incidentally StringBuilder is normally recommended rather than StringBuffer since it's quicker unless you need your code to be thread safe (which I don't think you do with the given code sample...).

Similar Messages

  • Parse lines out of a StringBuffer and/or InputStream

    I am loading and parsing a ~40MB text file. I am retrieving this file using the JCraft JSch SFTP library. This has given me no problems so far.
    Since I need to process this file line by line, my first approach was to read a character at a time off the InputStream provided by the SFTP library, collect characters until a new line was reached, then parse the line. This proved to be extremely slow. Now I'm pulling 1024 characters at a time into a byte[] from the stream and pushing that array into a StringBuffer until the end of the stream has been reached. It has sped up considerably, but now I don't know what the best way would be to process the buffer.
    What would be the best way to split off and process every line of this file? It seems redundant to pull the whole thing into a string buffer then parse it again by using charAt() and substring() to find and chop off lines. Reading character by character from the stream works in theory but is much too slow. Trying to parse the byte[] with fragments of lines is impractical and error prone.
    Memory is not an issue since it is running on a dedicated batch server, but speed is important.
    Thank you.

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    public class ReadLines {
        public static void readLinesFromInputStream(InputStream is)
             throws IOException {
         BufferedReader reader = new BufferedReader(new InputStreamReader(is),
              1024 * 1024);
         String line;
         while ((line = reader.readLine()) != null) {
             System.out.println(line);
    }Piet

  • Can I parse an XML file as a StringBuffer?

    I have an XML file loaded into a StringBuffer and would like to parse it as:
    (parser is a DOMParser object)
    parser.parse(aXMLStringBuffer.toString());
    I'm getting the data from a PL/SQL Stored Procedure - is there an alternative method for passing the to this function?
    Thanks,
    Andy Shiels

    Hi Andy...
    I JUST finished a Proof of Concept servlet, that makes use of an XML file loaded from a file as a string. I used StringReader, as opposed to StringBuffer.
    Hope this helps...
    Will.
    CODE SNIPPET:
    parser.parse(new StringReader(xmlString));
    XMLDocument xmlDocument = parser.getDocument();
    ...

  • How to delete the ends of line ["\n"] in a String before parsing

    hi, i'd want to parse a String with Regex/Pattern.
    This String contains ends of line i want to delete before applying my parsing treatment.
    I've tried to do that by replacing the character "\n" with "" :
        // the original text
        String orgTextToParse = new String(buffer);
        //we create a pattern to recognize the ends of line
        String regExpEol = "\n";
        Pattern patternEol = Pattern.compile(regExpEol);
        Matcher matcherEol = patternEol.matcher(orgTextToParse);
        // the new text without end of line
        StringBuffer newTextToParse = new StringBuffer();
        // we replace the "\n" by ""
        while(matcherEol.find()) {
          String REPLACE = "";
          matcherEol.appendReplacement(newTextToParse,REPLACE);
        matcherEol.appendTail(newTextToParse);
        System.out.println("[new string start] " + (newTextToParse.toString()) + " [end of new string]");Is there an appropriate way to delete "\n" ?
    (perhaps a method of the Pattern or Matcher classes... ?)
    thanx
    Edited by: jfact on Dec 29, 2007 11:05 AM
    Edited by: jfact on Dec 29, 2007 11:06 AM

    The second (optional) argument to Pattern is a set of flags. Take a look at the Javadoc.
    The 'genomic' implication is that the EOL is an arbitrary line break for human consumption so it does look like you need to remove the EOL. I would just use replaceAll() since it can be done with one line of code (or just a couple if you pre-compile the regex) without the need for any looping.
    line = line.replaceAll("\n","");Edited by: sabre150 on Dec 29, 2007 10:27 AM

  • Parseing an XML Document as a String

    Hi all,
    i am trying to parse an XML document to a parser. I get the file as a request parameter, which is filled in to at String variable.
    But for some reason i get an SAXException, does anyone se the problem?
    Thank you for your help...
    Below is the code
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.util.*;
    import java.text.*;
    import java.net.*;
    import java.net.URL;
    import java.sql.*;
    import org.w3c.dom.Document;
    import org.w3c.dom.NamedNodeMap;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    import org.xml.sax.SAXParseException;
    import javax.xml.parsers.*;
    import javax.xml.transform.stream.StreamSource;
    public class StartServlet extends HttpServlet
    private boolean debug = true;
    private final static String CONTENT = "content";
    private final static String COOKIES = "cookies";
    String resp = new String();
    private static String NODE_TYPES[] = new String[] {
         "ELEMENT",
         "ATTRIBUTE",
         "TEXT",
         "CDATA_SECTION",
         "ENTITY_REFERENCE",
         "ENTITY",
         "PROCESSING_INSTRUCTION",
         "COMMENT",
         "DOCUMENT",
         "DOCUMENT_TYPE",
         "DOCUMENT_FRAGMENT",
         "NOTATION" };
    public static void println(String s, int indent) {
         for(int i = 0 ; i < indent; i++) {
                   System.out.println(" ");
         System.out.println(s);
    public static void println(String s) {
         System.out.println(s);
    public static void print(Node node){
         printImpl(node, 0);
    public static void printImpl(Node node, int indent){
         if(node == null) {
              return;
         String nodeType = NODE_TYPES[node.getNodeType()];
         String nodeName = node.getNodeName();
         String nodeValue = node.getNodeValue();
         if(nodeValue != null) {
              nodeValue = nodeValue.trim();
         if(nodeType.equals("TEXT") && nodeValue.equals("")) {
              ; //Ignore emty node
         else {
              println(nodeType + " - " + nodeName + " - " + nodeValue, indent);
         NamedNodeMap attributes = node.getAttributes();
         if (attributes != null) {
              for(int i = 0; i < attributes.getLength(); i++) {
                   printImpl(attributes.item(i), indent + 1);
         NodeList children = node.getChildNodes();
         if(children != null) {
              for(int i = 0; i < children.getLength(); i++){
                   printImpl(children.item(i), indent + 1);
    public static DocumentBuilder newBuilder(boolean validation)
                        throws ParserConfigurationException {
         DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
         domFactory.setValidating(validation);
         domFactory.setNamespaceAware(true);
         DocumentBuilder domBuilder = domFactory.newDocumentBuilder();
         //domBuilder.setErrorHandler(new PrintErrorHandler());
         return domBuilder;
    public static Document newDocument()
                        throws ParserConfigurationException{
         DocumentBuilder domBuilder = newBuilder(false);
         Document document = domBuilder.newDocument();
         return document;
    public static Document parse( String xml, boolean validation)
                        throws ParserConfigurationException, IOException, SAXException {
              DocumentBuilder domBuilder = newBuilder(validation);
              Document document = domBuilder.parse(xml);
              return document;
    public void init() {
    public void service( javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res) {
              String[] cookies = null;
              try{
                   Hashtable document = getDocument("http://.../first.xml", cookies);
                   resp = (String) document.get(CONTENT);
                   debug(resp);
                   print(parse(resp, false));
              catch (SAXParseException e){
                   System.out.println("Saxfejl");
                   //System.exit(1);
              catch (Exception e){
                   e.printStackTrace();
                   System.exit(1);
    public void debug(String msg) {
         if(debug) {
              System.out.println(msg);
    public void performTask(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {
         try
              // Insert user code from here.
         catch(Throwable theException)
              // uncomment the following line when unexpected exceptions
              // are occuring to aid in debugging the problem.
              //theException.printStackTrace();
    public void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {
         performTask(request, response);
    public void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {
         performTask(request, response);
    private Hashtable getDocument(String urlCode, String[] oldCookies) {
         Hashtable document = new Hashtable();
         HttpURLConnection http = null;
         try {
              URL httpURL = new URL(urlCode);
              // If HTTP Protocol, then open connection using the Request method indicated
              URLConnection conn = httpURL.openConnection();
              http = (HttpURLConnection) conn;
              //http.setRequestMethod("GET");
              http.setDoInput(true);
              http.setDoOutput(true);
              http.setUseCaches(false);
              http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
              if (oldCookies != null) {
                   for (int j = 0; j < oldCookies.length; j++) {
                        String cookie = oldCookies[j];
                        http.setRequestProperty("Cookie", cookie);
              http.connect();
              http.getContent();
              StringBuffer tsb = new StringBuffer("");
              if (http.getResponseCode() == 200) {
                   InputStream cis = http.getInputStream();
                   byte[] a = new byte[1024];
                   int n = cis.read(a);
                   while (n >= 0) {
                        tsb.append(new String(a, 0, n));
                        n = cis.read(a);
                   cis.close();
                   document.put(CONTENT, tsb.toString());
              String[] cookies = null;
              if (cookies == null) {
                   int headerFieldIndex = 0;
                   String headerFieldValue = http.getHeaderField(headerFieldIndex);
                   Vector cookieValues = new Vector();
                   while (headerFieldValue != null) {
                        String headerFieldName = http.getHeaderFieldKey(headerFieldIndex);
                        if ((headerFieldName != null) && headerFieldName.toLowerCase().equals("set-cookie")) {
                             int index = headerFieldValue.indexOf(";");
                             if (index > -1) {
                                  headerFieldValue = headerFieldValue.substring(0, index);
                             cookieValues.addElement(headerFieldValue);
                        headerFieldValue = http.getHeaderField(++headerFieldIndex);
                   cookies = new String[cookieValues.size()];
                   cookieValues.copyInto(cookies);
              document.put(COOKIES, cookies);
         catch (Exception e) {
              debug("url problem" + e);
         finally {
              if (http != null) {
                   http.disconnect();
         return document;
    }

    Hi,
    Use this code it will helpful to you.
    resultXMLDocument=(XmlDocument)documentDoc;
    StringWriter sw = new StringWriter();
    resultXMLDocument.write((Writer) sw);
    xmlString=sw.toString();
    thnaks,
    suneel

  • Why are all the events in the XML SAX parser not activated?

    Hi everyone,
    I have written a mini server that parses XML files into SQL queries.
    Below is a segment of my code;
              try          {                                                       
                   Class.forName( JDBC_DRIVER );
                   myConnection = DriverManager.getConnection( DATABASE_URL, "username", "password");                                                  
                   EventXMLParser myEXP = new EventXMLParser(directory, myConnection);
                   File[] xmlFiles = directory.listFiles();
                   for (File xmlFile : xmlFiles)               {     
                        myEXP.XMLtoDB(xmlFile);
                        outWriter.println("File:" + xmlFile.getName() + " DONE");
              } catch (SQLException e)     {
                   System.err.println("SQLException for establishing connection");
                   e.printStackTrace();
              } catch (ClassNotFoundException e)     {
                   System.err.println("CLASS NOT FOUND EXCEPTION HERE");
                   e.printStackTrace();
              } catch (Exception e)     {
                   System.err.println(e);
                   e.printStackTrace();
              finally {
                   outWriter.println("PARSING COMPLETED");
                   outWriter.close();
         }Where the constructor EventXMLParser constructs the following:
         public EventXMLParser(File path, Connection connection)     {
              super();
              try     {
                   this.XMLpath = path;
                   this.db_connection = connection;
                   this.xr = XMLReaderFactory.createXMLReader();
                   this.XMLSAXhandler  = new DefaultHandler(); //create a new own handler
                   this.xr.setContentHandler(XMLSAXhandler);
                   this.xr.setErrorHandler(XMLSAXhandler);
                   //System.out.println("DEBUG: db_connection is " + db_connection.toString());
              catch (Exception e)     {
                   System.out.println("Constructor Error!");
                   e.printStackTrace();
         }Below are all my helper methods within EventXMLParser.java
         public void XMLtoDB(String XMLpath) throws Exception  {
              try     {
                   //Input
                   System.out.println("XMLpath is : " + XMLpath);
                   /*FileReader r = new FileReader(XMLpath); debug
                   InputSource in = new InputSource(r);
                   xr.parse(in);
                   xr.parse(XMLpath);
                   /* Note that while parsing, the end of each event, </event>
                    * will trigger sendSQL to execute the query on the database
              catch (Exception e)     {
                   throw new Exception("Error with XMLtoDB!! Exception: " + e);
         public void sendSQL(Event event, Connection sql_connection) throws SQLException     {
                   //JDBC part
                   try     {
                        System.err.println("DEBUG sendSQL");
                        Statement sql_statement = sql_connection.createStatement();
                        ResultSet resultSet = sql_statement.executeQuery( event.toSQL() );
                   catch (SQLException e)     {
                        e.printStackTrace();
         /* Parsing XML
          * From here onwards it's all designed for the SAX Parsing with different event calling methods
         public void startDocument()     {
              System.err.println("Start Document");
         public void endDocument()     {
              System.err.println("End Document");
         public void startElement(String uri, String name, String qName, Attributes atts)     {
              CurrentElement= name;
              System.out.println("This is parsing");
         public void characters(char ch[], int start, int length)     {
              SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
              StringBuffer sb = new StringBuffer();
              for (int i = start; i < start + length; i++)     
                   sb.append(ch);
              String content = sb.toString();
              if (CurrentElement.equals("eid"))
                   temp.setEventID( (Integer.valueOf(content)).intValue() ) ;
              else if (CurrentElement.equals("sd"))
                   temp.setShort_description(content);
              else if (CurrentElement.equals("ld"))
                   temp.setLong_description(content);
              else if ( (CurrentElement.equals("dt")))
                   temp.setDate_Time( formatter.parse(content, new ParsePosition(0)) );
              else if (CurrentElement.equals("repeat"))
                   temp.setRepeat_pattern( (Integer.valueOf(content)).intValue() );
              else if (CurrentElement.equals("valid"))
                   temp.setValid_period(content);
              else if (CurrentElement.equals("status"))     {
                   temp.setStatus( (Integer.valueOf(content)).intValue() );
              else {}
         public void endElement(String uri, String name, String qName)     {
              System.err.println("DEBUG" + temp.toString()); /*debug*/
              if (name.equals("event"))     {
                   try     {
                        /*debug*/ temp.setUserID(1);
                        /*debug*/ System.err.println("DEBUG: " + temp.toString());
                        sendSQL(temp, db_connection);
                        //temp = new Event();
                   catch (SQLException e)     {
                        System.err.println(e);
                   }//end catch
              }//end try
    Where event is a public class Event     {
         //fields
         private int userID = 1; // = 1 only applies for testing
         private int eventID;
         private String short_description;
         private String long_description;
         private Date date_time = null;
         private int repeat_pattern;
         private String valid_period;
         private int status;     //1 for new, 0 for modification and -1 for delete
         SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
         //Constructors
         //every event requires the following: userID eventID and short_Description
         public Event(int uID, int eID, String shortDescrp)     {
              setUserID(uID);
              setEventID(eID);
              setShort_description(shortDescrp);
         public Event(int uid, int eid, String sd,
                                  String ld, Date d_t, int r_p, String v_p, int s)     {
              setUserID(uid);
              setEventID(eid);
              setShort_description(sd);
              setLong_description(ld);
              setDate_Time(d_t);
              setRepeat_pattern(r_p);
              setValid_period(v_p);
              setStatus(s);
         //set
         public void setUserID (int x)                         { this.userID = x ;}
         public void setEventID (int x)                         { this.eventID = x ;}
         public void setShort_description (String x)          { this.short_description = x ;}
         public void setLong_description (String x)          { this.long_description = x ;}
         public void setDate_Time(Date x)                    { this.date_time = x ;}
         public void setRepeat_pattern (int x)               { this.repeat_pattern = x ;}
         public void setValid_period (String x)               { this.valid_period = x ;}
         public void setStatus (int x)                         { this.status = x; }
         //get
         public int           getUserID()                              { return this.userID;}
         public int           getEventID()                         { return this.eventID;}
         public String      getShort_description()               { return this.short_description;}
         public String      getLong_description()               { return this.long_description;}
         public Date        getDate_Time()                         { return this.date_time;}
         public int         getRepeat_pattern()                    { return this.repeat_pattern;}
         public String      getValid_period()                    { return this.valid_period;}
         public int           getStatus()                              { return this.status; }
         //Event to SQL statements;
         public String toSQL()     {
              StringBuffer sb = new StringBuffer();
              ///if ( status == 1)     {
                   sb.append( "INSERT INTO events SET" );
                   sb.append( " userID = " + userID + ", ");
                   sb.append( "eventID = " + eventID + ", " );
                   sb.append( "short_description = " + "\'" + short_description + "\'" + ", "); //String
                   sb.append( "long_description = " + "\'" + long_description + "\'"  + ", "); //String
                   sb.append( "date_time = " + "\'" + formatter.format(date_time) + "\'" + ", ");
                   sb.append( "repeat_pattern = " + repeat_pattern + ", " );
                   sb.append( "valid_period = " + "\'" + valid_period + "\'" ); //String
                   sb.append( ";");
              //} else if ( status == 2)      {
              System.err.println(sb.toString());
              return sb.toString();
    }     My question is: I have taken my SQL query generated by toSQL() method in events and it worked.
    Here is the funny thing:
    Everything is correct syntax wise: No complaints what soever
    The mysql part works: Tested separately.
    So I tend to think that the problem lies within the SAX parser. I have written SAX2 parsers on this machine before and they have worked too. I tried inserting println statements all over startElement endElement etc etc only to find out that the SAX parser did not call any of the methods that I overided!! Why is that so?
    Can you guys spot where my SAX parser fails?

    I see.
    I try to correct this problem by removing super();
    so right now my code looks like this:
         static Event temp = new Event(0, 0, "null", "null", new Date(), 0, "null", 0);
         static String CurrentElement = null;
         static File XMLpath;
         static Connection db_connection;
         static XMLReader xr;
         static DefaultHandler XMLSAXhandler; 
         //Constructor,      Build the SAX Parser
         public EventXMLParser(File path, Connection connection)     {
              try     {
                   this.XMLpath = path;
                   this.db_connection = connection;
                   this.xr = XMLReaderFactory.createXMLReader();
                   this.XMLSAXhandler  = new DefaultHandler(); //create a new own handler
                   this.xr.setContentHandler(XMLSAXhandler);
                   this.xr.setErrorHandler(XMLSAXhandler);
                   //System.out.println("DEBUG: db_connection is " + db_connection.toString());
              catch (Exception e)     {
                   System.out.println("Constructor Error!");
                   e.printStackTrace();
         }This time, I created a new instance of default handler() which can be referenced by as the objects's XMLSAXhandler. However, that did not solve the problem, why does the problem still persist?
    Right now, there is only one instance of a default handler created. So why does all my parsing event functions still get ignored?

  • Need help on parsing xml file...

    Hi all,
    I need to collect some data from an Xml file using java. I have the following code with me but I am unable to get the required result. I am unable to get the data from the tags belonging to the header and footer elements. Please find the code and the sample xml file below.
    Program to parse XML:
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    public class JobLogDetails3{
         //No generics
         List myJobs;
         Document dom;
         public JobLogDetails3(){
              //create a list to hold the job objects
              myJobs = new ArrayList();
         public void runJobDetails() {
              //parse the xml file and get the dom object
              parseXmlFile();
              //get each joblog element and create a job object
              parseDocument();
              //Iterate through the list and print the data
              printData();
         private void parseXmlFile(){
              //get the factory
              DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
              try {
                   //Using factory get an instance of document builder
                   DocumentBuilder db = dbf.newDocumentBuilder();
                   //parse using builder to get DOM representation of the XML file
                   dom = db.parse("test.xml");
              }catch(ParserConfigurationException pce) {
                   pce.printStackTrace();
              }catch(SAXException se) {
                   se.printStackTrace();
              }catch(IOException ioe) {
                   ioe.printStackTrace();
         private void parseDocument(){
              //get the root elememt
              Element docEle = dom.getDocumentElement();
              //get a nodelist of <joblog> elements
              NodeList nl = dom.getElementsByTagName("*");
              if(nl != null && nl.getLength() > 0) {
                   for(int i = 0 ; i < nl.getLength();i++) {
                        //get the joblog element
                        Element el = (Element)nl.item(i);
                        //get the joblog object
                        Job J = getJob(el);
                        //add it to list
                        myJobs.add(J);
         * I take an joblog element and read the values in, create
         * an joblog object and return it
         * @param JobEl
         * @return
         private Job getJob(Element JobEl) {
              //for each <joblog> element get text or int values of
              //name ,id, age and name
              String jobServer = getTextValue(JobEl,"server");
              String jobName = getTextValue(JobEl,"name");
              String jobClient = getTextValue(JobEl,"machine_name");
              String jobStart = getTextValue(JobEl,"start_time");
              String jobType = getTextValue(JobEl,"type");
              String jobEnd = getTextValue(JobEl,"end_time");
              String jobSize = getTextValue(JobEl,"new_processed_bytes");
              //Create a new Job with the value read from the xml nodes
              Job J = new Job(jobServer,jobName,jobClient,jobStart,jobType,jobEnd,jobSize);
              return J;
         * I take a xml element and the tag name, look for the tag and get
         * the text content
         * i.e for <employee><name>John</name></employee> xml snippet if
         * the Element points to employee node and tagName is name I will return John
         * @param ele
         * @param tagName
         * @return
         private String getTextValue(Element ele, String tagName) {
              String textVal = null;
              NodeList nl = ele.getElementsByTagName(tagName);
              if(nl != null && nl.getLength() > 0) {
                   Element el = (Element)nl.item(0);
                   textVal = el.getFirstChild().getNodeValue();
              return textVal;
         * Calls getTextValue and returns a int value
         * @param ele
         * @param tagName
         * @return
         private int getIntValue(Element ele, String tagName) {
              //in production application you would catch the exception
              return Integer.parseInt(getTextValue(ele,tagName));
         * Iterate through the list and print the
         * content to console
         private void printData(){
              System.out.println("No of Jobs '" + myJobs.size() + "'.");
              Iterator it = myJobs.iterator();
              while(it.hasNext()) {
                   System.out.println(it.next().toString());
         public static void main(String[] args){
              //create an instance
              JobLogDetails JLD = new JobLogDetails();
              //call run example
              JLD.runJobDetails();
    Job Class
    public class Job {
         private String jobServer;
    private String jobName;
    private String jobClient;
    private String jobStart;
    private String jobType;
    private String jobEnd;
    private String jobSize;
         public Job(){
         public Job(String jobServer,String jobName,String jobClient,String jobStart,String jobType,String jobEnd,String jobSize ) {
              this.jobServer = jobServer;
              this.jobName = jobName;
              this.jobClient = jobClient;
    this.jobStart = jobStart;
              this.jobType = jobType;
    this.jobEnd = jobEnd;
    this.jobSize = jobSize;
         public String getjobServer() {
              return jobServer;
         public void setjobServer(String jobServer) {
              this.jobServer = jobServer;
         public String getjobName() {
              return jobName;
         public void setjobname(String jobName) {
              this.jobName = jobName;
         public String getjobClient() {
              return jobClient;
         public void setjobClient(String jobClient) {
              this.jobClient = jobClient;
    public String getjobStart() {
              return jobStart;
         public void setjobStart(String jobStart) {
              this.jobStart = jobStart;
    public String getjobType() {
              return jobType;
         public void setjobType(String jobType) {
              this.jobType = jobType;
    public String getjobEnd() {
              return jobEnd;
         public void setjobEnd(String jobEnd) {
              this.jobEnd = jobEnd;
    public String getjobSize() {
              return jobSize;
         public void setjobSize(String jobSize) {
              this.jobSize = jobSize;
         public String toString() {
              StringBuffer sb = new StringBuffer();
    sb.append(getjobServer());
              sb.append(",");
    sb.append(getjobName());
              sb.append(",");
              sb.append(getjobClient());
              sb.append(",");
              sb.append(getjobType());
              sb.append(",");
              sb.append(getjobStart());
              sb.append(",");
              sb.append(getjobEnd());
              sb.append(",");
              sb.append(getjobSize());
              sb.append(",");
              return sb.toString();
    Sample XML File:
    <?xml version="1.0" encoding="UTF-16" ?>
    - <joblog>
    <job_log_version version="2.0" />
    - <header>
    <filler>======================================================================</filler>
    <server>Job server: TGBBAK</server>
    <name>Job name: TGBSAP4-SQL-SQL DB Servers S2T - High-Weekly Full Backup</name>
    <start_time>Job started: 26 September 2011 at 01:00:04</start_time>
    <type>Job type: Backup</type>
    <log_name>Job Log: GFD_TGBBAK_71887.xml</log_name>
    <filler>======================================================================</filler>
    </header>
    <media_mount_date>Drive and media mount requested: 26/09/2011 01:00:04</media_mount_date>
    - <media_drive_and_media_info>
    <media_mount_date>Drive and media information from media mount: 26/09/2011 01:00:39</media_mount_date>
    <robotic_library_name>Robotic Library Name: HP 1</robotic_library_name>
    <drive_name>Drive Name: LTO4_2</drive_name>
    <slot>Slot: 43</slot>
    <media_label>Media Label: 000059L</media_label>
    <media_guid>Media GUID: {a6ca0062-7a6f-4b4b-8144-732ca25f2f9d}</media_guid>
    <media_overwrite_date>Overwrite Protected Until: 25/10/2011 19:24:58</media_overwrite_date>
    <media_append_date>Appendable Until: 02/10/2011 14:00:30</media_append_date>
    <media_set_target>Targeted Media Set Name: Weekly Tape</media_set_target>
    </media_drive_and_media_info>
    - <backup>
    <filler>======================================================================</filler>
    <title>Job Operation - Backup</title>
    <append_or_overwrite>Media operation - append.</append_or_overwrite>
    <compression>Compression Type: Hardware [if available, otherwise none]</compression>
    <verify_option>WARNING: The option 'Verify after backup completes' was not selected. Performing a verify operation to make sure that media can be read after the backup has completed is recommended.</verify_option>
    <filler>======================================================================</filler>
    - <machine>
    <machine_name>TGBSAP4.Tetley.Grp</machine_name>
    <info>Network control connection is established between 10.22.2.18:3271 <--> 10.22.2.4:10000</info>
    <info>Network data connection is established between 10.22.2.18:3301 <--> 10.22.2.4:3094</info>
    - <set>
    <set_resource_name>TGBSAP4.Tetley.Grp</set_resource_name>
    <tape_name>Family Name: "Media created 25/09/2011 13:59:55"</tape_name>
    - <volume>
    <display_volume>Backup of "TGBSAP4.Tetley.Grp "</display_volume>
    </volume>
    <description>Backup set #45 on storage media #1 Backup set description: "Weekly Full Backup"</description>
    <backup_type>Backup Method: Full - Back up entire database or filegroup</backup_type>
    <agent_started>Microsoft SQL Server Agent: Started</agent_started>
    <start_time>Backup started on 26/09/2011 at 01:01:45.</start_time>
    - <database>
    <database>Database PRD</database>
    </database>
    - <database>
    <database>Database master</database>
    </database>
    - <database>
    <database>Database model</database>
    </database>
    - <database>
    <database>Database msdb</database>
    </database>
    <end_time>Backup completed on 26/09/2011 at 02:42:25.</end_time>
    - <summary>
    <backed_up_database>Backed up 4 databases</backed_up_database>
    <new_processed_bytes>Processed 573363576542 bytes in 1 hour, 40 minutes, and 40 seconds.</new_processed_bytes>
    <vlm_hist_rateformat2>Throughput rate: 5432 MB/min</vlm_hist_rateformat2>
    </summary>
    <filler>----------------------------------------------------------------------</filler>
    </set>
    </machine>
    </backup>
    - <footer>
    <filler>======================================================================</filler>
    <end_time>Job ended: 26 September 2011 at 02:43:12</end_time>
    <engine_completion_status>Job completion status: Successful</engine_completion_status>
    <filler>======================================================================</filler>
    <completeStatus>19</completeStatus>
    </footer>
    </joblog>

    1. your code does not compile (in your main method you try to create an instance of a class which does not exist).
    2. your XML document is not well formed.
    +[Fatal Error] test.xml:34:74: The content of elements must consist of well-formed character data or markup.+
    org.xml.sax.SAXParseException: The content of elements must consist of well-formed character data or markup.
    Maybe there are other problems but you can start by fixing these.

  • Sax parser problem

    hi,
    i am assuming the problem is with sax parser but i cant be sure. I am parsing a xml file (about 1.4MB) with some data in it. the parser i have created reads the xml file correctly for the most part but when at some point the
    "public void characters(char buf[], int offset, int len) throws SAXException"
    function stops working correctly....i.e it doesnt fully read read the data between the "<start>" and "</start>" element. say it reads about 100 id's correctly---for 101 ID it does this. This is just an example. Since, the problem might be with how :
    "public void characters(char buf[], int offset, int len) throws SAXException"
    function is reading the data i was wondering if anybody else had encountered this problem or please let me know if i need to change something in the code: here's a part of the code :
    Bascially i have created three classes to enter data into three mysql tables and as i parse the data i fill up the columns by matching the column header with the tagName.
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.*;
    import java.io.*;
    import java.util.ArrayList;
    import java.lang.Object;
    import org.xml.sax.*;
    import org.xml.sax.helpers.DefaultHandler;
    import java.util.*;
    import javax.xml.parsers.SAXParserFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    public class Echo03 extends DefaultHandler
    StringBuffer textBuffer;
    int issuedValue, prodValue;
    OrdHeader header = new OrdHeader();
    OrdDetail detail = new OrdDetail();
    Member memInfo = new Member();
    //new addition to store the dynamic value of the products
    TestOrdheader prod = new TestOrdheader();
    int counter;
    String tag, newTag;
    SetValue setVal = new SetValue();
    String test;
    public static void main(String argv[])
    if (argv.length != 1) {
    System.err.println("Usage: cmd filename");
    System.exit(1);
    // Use an instance of ourselves as the SAX event handler
    DefaultHandler handler = new Echo03();
    // Use the default (non-validating) parser
    SAXParserFactory factory = SAXParserFactory.newInstance();
    try {
    // Set up output stream
    out = new OutputStreamWriter(System.out, "UTF8");
    // Parse the input
    SAXParser saxParser = factory.newSAXParser();
    saxParser.parse( new File(argv[0]), handler);
    } catch (Throwable t) {
    t.printStackTrace();
    System.exit(0);
    static private Writer out;
    private String indentString = " "; // Amount to indent
    private int indentLevel = 0;
    //===========================================================
    // SAX DocumentHandler methods
    //===========================================================
    public void startDocument()
    throws SAXException
    nl();
    nl();
    emit("START DOCUMENT");
    nl();
    emit("<?xml version='1.0' encoding='UTF-8'?>");
    header.assign();
    public void endDocument()
    throws SAXException
    nl(); emit("END DOCUMENT");
    try {
    nl();
    out.flush();
    } catch (IOException e) {
    throw new SAXException("I/O error", e);
    public void startElement(String namespaceURI,
    String lName, // local name
    String qName, // qualified name
    Attributes attrs)
    throws SAXException
    indentLevel++;
    nl(); //emit("ELEMENT: ");
    String eName = lName; // element name
    if ("".equals(eName)) eName = qName; // namespaceAware = false
    if (qName.equals("Billing")){
    issuedValue = 1;
    }else if (qName.equals("Shipping")){
    issuedValue = 2;
    }else if (qName.equals("ShippingTotal")){
    issuedValue = 3;
    //check to see if "Product" is the name of the element thats coming next
    if (qName.equals("Product")){
    if (issuedValue != 3){
    prodValue = 1;
    prod.addCounter();
    }else{
    prodValue = 0;
    tag = eName;
    if (attrs != null) {
    for (int i = 0; i < attrs.getLength(); i++) {
    String aName = attrs.getLocalName(i); // Attr name
    if ("".equals(aName)) aName = attrs.getQName(i);
    nl();
    emit(" ATTR: ");
    emit(aName);
    emit("\t\"");
    emit(attrs.getValue(i));
    emit("\"");
    if (attrs.getLength() > 0) nl();
    public void endElement(String namespaceURI,
    String sName, // simple name
    String qName // qualified name
    throws SAXException
    nl();
    String eName = sName; // element name
    if ("".equals(eName)){
    eName = qName; // not namespaceAware
    if ("Order".equals(eName)){          
    //enter into database
         databaseEnter();
    textBuffer = null;
    indentLevel--;
    public void characters(char buf[], int offset, int len)
    throws SAXException
    nl();
    try {
    String s = new String(buf, offset, len);
    if (!s.trim().equals("")){
    settag(tag, s);
    s = null;
    }catch (NullPointerException E){
    System.out.println("Null pointer Exception:"+E);
    //===========================================================
    // Utility Methods ...
    //===========================================================
    // Wrap I/O exceptions in SAX exceptions, to
    // suit handler signature requirements
    private void emit(String s)
    throws SAXException
    try {
    out.write(s);
    out.flush();
    } catch (IOException e) {
    throw new SAXException("I/O error", e);
    // Start a new line
    // and indent the next line appropriately
    private void nl()
    throws SAXException
    String lineEnd = System.getProperty("line.separator");
    try {
    out.write(lineEnd);
    for (int i=0; i < indentLevel; i++) out.write(indentString);
    } catch (IOException e) {
    throw new SAXException("I/O error", e);
    ===================================================================
    ///User defined methods
    ===================================================================
    private String strsplit(String splitstr){
    String delimiter = new String("=");
    String[] value = splitstr.split(delimiter);
    value[1] = value[1].replace(':', ' ');
    return value[1];
    public void settag(String tag, String s){         
    String pp_transid = null, pp_respmsg = null,pp_authid = null, pp_avs = null, pp_avszip = null;
    if ((tag.equals("OrderDate")) || (tag.equals("OrderProcessingInfo"))){
    if (tag.equals("OrderDate")){
    StringTokenizer st = new StringTokenizer(s);
    String orddate = st.nextToken();
    String ordtime = st.nextToken();
    header.put("ordDate", orddate);
    header.put("ordTime", ordtime);
    }else if (tag.equals("OrderProcessingInfo")){
    StringTokenizer st1 = new StringTokenizer(s);
    int tokenCount = 1;
    while (tokenCount <= st1.countTokens()){
    switch(tokenCount){
    case 1:
    String extra = st1.nextToken();
    break;
    case 2:
    String Opp_transid = st1.nextToken();
    pp_transid = strsplit(Opp_transid);
    break;
    case 3:
    String Opp_respmsg = st1.nextToken();
    pp_respmsg = strsplit(Opp_respmsg);
    break;
    case 4:
    String Opp_authid = st1.nextToken();
    pp_authid = strsplit(Opp_authid);
    break;
    case 5:
    String Opp_avs = st1.nextToken();
    pp_avs = strsplit(Opp_avs);
    break;
    case 6:
    String Opp_avszip = st1.nextToken();
    pp_avszip = strsplit(Opp_avszip);
    break;
    tokenCount++;
    header.put("pp_transid", pp_transid);
    header.put("pp_respmsg", pp_respmsg);
    header.put("pp_authid", pp_authid);
    header.put("pp_avs", pp_avs);
    header.put("pp_avszip", pp_avszip);
    }else{
    newTag = new String(setVal.set_name(tag, issuedValue));
    header.put(newTag, s);
    //detail.put(newTag, s);
    prod.put(newTag, s);
    memInfo.put(newTag,s);
    //Check to see-- if we should add this product to the database or not
    boolean check = prod.checkValid(newTag, prodValue);
    if (check){
    prod.addValues(s);
    setVal.clearMod();
    ==================================================================
    Here's the error that i get:
    java.util.NoSuchElementException
    at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:691)
    at org.apache.crimson.parser.Parser2.parse(Parser2.java:337)
    at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
    at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
    at javax.xml.parsers.SAXParser.parse(SAXParser.java:281)
    at Echo03.main(Echo03.java:47)

    I haven't gone through your code but I also had a similar error....and the exception in my was because of an "&" instead of the entity reference & in one of the element values. I use a non-validating parser but if you use a validating one then this might not be the reason for your exception.

  • How do you store parsed XML data in an array

    Hi, i am trying to complete a small program which implements the SAX parser to parse an XML file. My problem is that i am writing a custom class to store the parsed data into an array, and then make the array available to the main program via a simple method which returns the array. I know this must be very simple to do, but i seem to have developed a mental block with this part of the program. I can parse the data and print all the elements to the screen, but i just cant figure out how to store all the data elements into the array. I will post the class which is supposed to do this, and ask anyone out there if they know what i'm doing wrong, and also, if there is a more effeicient way of achieving this ( i expect there definitely is!! but i have never used the SAX parser before and am getting confused by the API docs on it!!) Any help very much appreciated.
    Here is my attempt at coding the class to handle the parsed XML data
    class Sink extends org.xml.sax.helpers.DefaultHandler
         implements org.xml.sax.ContentHandler{
    Customer[] customers = new Customer[20];
         int count = 1;
         int x = 0;
         int tagCount = 0;
         String name;
    String custID;
         String username;
         String address;
         String phoneNum;
    public void startElement(String uri, String localName, String rawName, final org.xml.sax.Attributes attributes)throws org.xml.sax.SAXException{
    //count the number of <name> tags in the XML file
         if(rawName.equals("name")){
              tagCount++;
    public void characters(char[] ch, int start, int len){
    //get the current string
         String text = new String(ch, start, len);
         String text1 = text.trim();
    //there are 5 elements for each customer found in the XML file so when the count reaches 6
    // i reset this to 1
         if(count == 6){
         count = count - 5;
         if(text1.length()>0 && count == 1){
              name = text1;
              System.out.println(name);
              }else{
         if(text1.length()>0 && count == 2){
              custID = text1;
              System.out.println(custID);
                   }else{
                   if(text1.length()>0 && count == 3){
                   username = text1;
                   System.out.println(username);
                   }else{
                        if(text1.length()>0 && count == 4){
                        address = text1;
                        System.out.println(address);
                        }else{
                        if(text1.length()>0 && count == 5){
                             phoneNum = text1;
                             System.out.println(phoneNum);
                             //add data to the customer array
                             customers[x] = new Customer(name, custID, username, address, phoneNum);
    // increment the array index counter
                        x = x+1;
                        }//end of if
                        }//end else
                        }//end else
                   }//end else
              }//end else
    }//end of characters method
    public void endDocument(){
         System.out.println("There are " + tagCount +
         " <name> elements.");
    }//end of class Sink
    Before the end of this class i also need to make the array available to the calling program!!
    Any help would be much appreciated
    Thanks
    Iain

    Ok, yer going about this all the wrong way. You shouldn't have to maintain a count of all the elements. Basically you are locking yourself into the XML tags not only all being there but are assuming they are all in the same order. What you should do is in your characters() method, put all of the characters into a string buffer. Then, in endElement() (which you dont use btw, you should) you grab the information that is in the string buffer and store it into your Customer object depending on what the tagName is.
    Also, you should probably use a List to store all the Customer objects and not an single array, it's more dynamic and you arent locked into a set number of Customers.
    I wont do it all for you, but I'll give you a good outline to use.
    public class CustomerHandler extends DefaultHandler {
        private java.util.List customerList;  // List of Customer objects
        private java.util.StringBuffer buf;   // StringBuffer to store the string of characters between the start and end tags
        private Customer customer;  // Customer object that is initialized with each entry.
        public CustomerHandler() {
            customerList = new java.util.ArrayList();   // Initialize the List
            buf = new java.util.StringBuffer();   // Initialize the string buffer
        //  Make your customer list available to other classes
        public java.util.List getCustomerList() {
            return customerList;
        public void startElement(String nsURI, String sName, String tagName, Attributes attributes) throws SAXException {
            // Clear the String Buffer
            //  If the tagName is "Customer" then create a new Customer object
        public void characters(char[] ch, int start, int length) {
            //  append the characters into the string buffer
        public void endElement(String nsURI, String sName, String tagName) throws SAXException {
            // If the tagName is "Customer" add your customer object to the List
            // Place the data from the String Buffer into a String
            //  Depending on the tagName, call the appropriate set method on your customer object
    }

  • Problem in error handling in SAX Parser

    My application takes xml message as input.
    If a error was found while validating, an <Errors> <Error></Error></Errors> element is included in the orginal message and send back to the user.
    While validation xml message I found an interesting problem.
    Created a false entry for the root element attribute.
    Traced method invocation.
    First the call back error method is invoked,then the start element(stored the attributes inside the starElement to a instance variable).When i tried to print the attribute .As the error method got invoked first
    if showed "null".
    But when i created the same case with the child elements attributes
    even though invoking of the methods happens in the same sequence
    attributes got assigned and can print the attibutes values.
    xml is schema vaidated .Is there any restriction that root element should not contain attributes.Can any one explain how the call back methods are invoked .
    Regards
    Dheeraj
    // import statements here
    public class OperationHandler extends DefaultHandler {
         private static Logger logger = Logger.getLogger(OperationHandler.class.getName());
         private Attributes attributes;
         private StringBuffer dataStore;
    public OperationHandler() {
    dataStore = new StringBuffer(100);
         * Receive notification of the end of an document.
         public void startDocument() {
              logger.debug("OperationHandler: startDocument");
         * Receive notification of the beginning of the element.
         public void startElement(String uri, String lName,
                                            String qName, Attributes attributes) {
              logger.debug("OperationHandler: startElement" + lName);
              dataStore.setLength(0);
         * Receive notification of the end of an element.
         public void endElement(String uri, String lName, String qName) {
              logger.debug("OperationHandler: endElement");
              // bussiness specific code
         * Receive notification of the end of an document.
         public void endDocument() {
              logger.debug("OperationHandler: endDocument");
         public void error(SAXParseException saxe) {
              logger.debug("OperationHandler : error");
              System.out.println("CurrentElement"+currentElement +" "+"Attributes" + attributes);
                   if(attributes != null) {
                        for(int i=0; i < attributes.getLength(); i++) {
                             System.out.println(saxe.getColumnNumber());
                             System.out.println(saxe.getLineNumber());
                             System.out.println(saxe.getMessage());
         public void fatalError(SAXParseException saxe) throws SAXException {
              logger.debug("Fatal error while parsing message");
              logger.error("Error " + saxe.getMessage() );
         public void warning(SAXParseException saxe) throws SAXException {
              logger.warn("Warning " + saxe.getMessage() );
         * Receive notification of character data inside an element.
         public void characters(char[] charData,int start, int length) {
              String strData = new String(charData, start, length);
              if(strData != null) {
                   strData.trim();
                   dataStore.append(strData);
    }

    Hi Muruganand,
    Is the data load failing while loading data or while activating?
    if the data load is failing at activation, thers is nothing you can do except editing the records in PSA and then update them.
    As far as i have seen, the data load to DSO fails in Activation and not while loading. this is the reason why the records are not collected in error stack
    unlike if it is a cube, the data load fails while loading collecting the recods in error stack.
    hope this helps,
    Thanks and Regards,
    Srinath.

  • Parse RSS feed -System.out

    Hi,
    As below i have been reading RSS feeds.
    When i execute the parser.parse(url) method i get a dump of the xml bones from the feed onto System.out, which in my case is a catalina log file.
    Is there any way/method that im not aware of that can prevent this going to System.out?
    public void readRSSDocument() throws Exception {
            //Create the parser
            RssParser parser = RssParserFactory.createDefault();
            //Parse our url
            Rss rss = parser.parse(
                    new URL("http://rss.cnn.com/rss/cnn_world.rss"));
        }output:
    <rss>
    <channel>
    <title>
    </title>
    <link>
    </link>
    <description>
    </description>
    <language>
    </language>
    <copyright>
    </copyright>
    <pubDate>
    </pubDate>
    <ttl>
    </ttl>
    <image>
    <title>
    </title>
    <link>
    </link>
    <url>
    </url>
    <width>
    </width>
    <height>
    </height>
    <description>
    </description>
    </image>
    <atom10:link>
    </atom10:link>
    <atom10:link>
    </atom10:link>
    <item>
    <title>
    </title>
    <guid>
    </guid>
    <link>
    </link>
    <description>
    </description>
    <pubDate>
    </pubDate>
    <feedburner:origLink>
    </feedburner:origLink>
    </item>
    <item>
    <title>
    </title>
    <guid>
    </guid>
    <link>
    </link>
    <description>
    </description>
    <pubDate>
    ..

    I am presuming that you picked up the code from [this tutorial|http://java.sun.com/developer/technicalArticles/javaserverpages/rss_utilities/]
    Looks like the library was compiled with System.out.println() statements in it.
    There is always the handy little method "System.setOut()" to redirect it.
    Alternatively, decompile the code, delete/comment the System.out.println statements and then recompile it.
    Its not that hard. Here's the offending class:
    // Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
    // Jad home page: http://www.kpdus.com/jad.html
    // Decompiler options: packimports(3)
    // Source File Name:   DocumentHandler.java
    package com.sun.cnpi.rss.handlers;
    import com.sun.cnpi.rss.elements.Element;
    import com.sun.cnpi.rss.elements.Rss;
    import java.io.PrintStream;
    import java.util.*;
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    // Referenced classes of package com.sun.cnpi.rss.handlers:
    //            NullElementHandler, ElementHandler, HandlerException
    public class DocumentHandler extends DefaultHandler
        public DocumentHandler()
            handlers = new HashMap();
            handlerStack = new Stack();
            parentStack = new Stack();
            rss = new Rss("rss");
            handlers.put(null, new NullElementHandler());
            parentStack.add(rss);
        public void registerHandler(String key, ElementHandler handler)
            handlers.put(key.toLowerCase(), handler);
        public void addToParentStack(Element parent)
            parentStack.add(parent);
        public Element popFromParentStack()
            return (Element)parentStack.pop();
        public Element peekParentStack()
            return (Element)parentStack.peek();
        public void startElement(String uri, String localName, String qName, Attributes attributes)
            throws SAXException
            //System.out.println("<" + qName + ">");
            try
                ElementHandler currentHandler = (ElementHandler)handlers.get(qName.toLowerCase());
                handlerStack.add(currentHandler);
                if(currentHandler != null)
                    Element parent = (Element)parentStack.peek();
                    currentHandler.startElement(this, parent, uri, localName, qName, attributes);
            catch(HandlerException e)
                e.printStackTrace();
            super.startElement(uri, localName, qName, attributes);
        public void characters(char ch[], int start, int length)
            throws SAXException
            StringBuffer buffer = new StringBuffer();
            Element element = (Element)parentStack.peek();
            if(element.getText() != null)
                buffer.append(element.getText());
            buffer.append(ch, start, length);
            element.setText(buffer.toString());
            super.characters(ch, start, length);
        public void endElement(String uri, String localName, String qName)
            throws SAXException
            //System.out.println("</" + qName + ">");
            if(!handlerStack.isEmpty())
                try
                    ElementHandler currentHandler = (ElementHandler)handlerStack.pop();
                    if(currentHandler != null)
                        Element parent = (Element)parentStack.peek();
                        currentHandler.endElement(this, parent, uri, localName, qName);
                catch(HandlerException e)
                    e.printStackTrace();
            super.endElement(uri, localName, qName);
        public Rss getRss()
            return rss;
        private Map handlers;
        private Stack handlerStack;
        private Stack parentStack;
        private Rss rss;
    }

  • DocumentBuilder.parse() fails after CLOB is updated

    I have written a java application that reads XML content stores in a CLOB column in a 9.2.0.5 database. The application works just fine until the contents of the CLOB is modified, then I get the fatal error shown below.
    I am using classes from the javax.xml.parsers.* package to process the XML content. Using an OracleStatement and OracleResultSet I read the CLOB column into a CLOB variable (named clob) using the getCLOB() method. I then create an InputSource using the following statement:
    InputSource source = new InputSource(clob.getAsciiStream());
    and then create a Document using the following the statements:
    builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    outDoc = builder.parse(source);     
    The parse method works fine until the CLOB is updated (using TOAD) and then it fails. I have modified the program to print the contents of the CLOB using the methods described in the Oracle JDBC guide; using a while loop, CLOB.read() and StringBuffer. I have noticed that the output before and after the CLOB is updated is definitely different; there is extraneous information following the XML document - I just don't understand why this happens.
    [Fatal Error] :23:10: Content is not allowed in trailing section.
    org.xml.sax.SAXParseException: Content is not allowed in trailing section.
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at com.embMessageProcessor.processMsgList(embMessageProcessor.java:91)
    at com.embMessageProcessor.main(embMessageProcessor.java:28)
    Press any key to continue...

    rangelot,
    Could be a bug in the JDBC driver you are using. Sorry, I couldn't find any details, in your post, of which one you are using.
    JDBC drivers also need to be compatible with JDK versions. Have you verified that yours is compatible?
    JDBC drivers are supposed to be backward compatible, so maybe using the latest Oracle JDBC driver may resolve this problem.
    Have you checked the MetaLink Web site? This may be a known issue. If not, then you can always report it as a bug (also on MetaLink).
    Good Luck,
    Avi.

  • Java XMl parsing problems

    i have an xml sturcture as shown below:
    <cnv:conversion xmlns:cnv="urn:ssis-conv" xmlns:xsql="urn:oracle-xsql">
    <cnv:roottag support="yes" destag="xfw:script">
    <cnv:addattr name="debug" value="no" />
    <cnv:addattr name="xmlns:xfw" value="urn:scb-xfw-v2" />
    </cnv:roottag>
    <xsql:query support="yes" destag="xfw:genxml">
    <connection support="no" />
    <row-element support="yes" destag="row-name" />
    <rowset-element support="yes" destag="rowset-name" />
    <id-attribute support="no" />
    <tag-case support="no" />
    <null-indicator support="no" />
    <cnv:addattr name="debug" value="yes" />
    <cnv:addattr name="Attribute1" value="Value1" />
    </xsql:query>
    <xsql:no-rows-query support="no" child="no" />
    <responsedata support="no" child="yes" />
    <responsedata2 support="no" child="yes" />
    <page destag="page1" support="yes">
    <connection support="no" /> <debug destag="MyDebug" />
    <cnv:addattr name="tt" value="t1" />
    </page>
    <xsql:set-page-param support="yes" destag="setpageparam">
    <name destag="myname" />
    </xsql:set-page-param>
    <xsql:set-page-param-local support="yes" destag="Myset-page-param-local">
    <name destag="mylocalname" />
    </xsql:set-page-param-local>
    </cnv:conversion>
    I want this xml to be validated by the dom parser which i had done and its showing it as valid XML.
    If there are any repeating tags like:
    <cnv:conversion xmlns:cnv="urn:ssis-conv" xmlns:xsql="urn:oracle-xsql">
    <cnv:conversion xmlns:cnv="urn:ssis-conv" xmlns:xsql="urn:oracle-xsql">
    <cnv:roottag support="yes" destag="xfw:script">
    <cnv:addattr name="debug" value="no" />
    <cnv:addattr name="xmlns:xfw" value="urn:scb-xfw-v2" />
    </cnv:roottag>
    <xsql:query support="yes" destag="xfw:genxml">
    <connection support="no" />
    <row-element support="yes" destag="row-name" />
    <rowset-element support="yes" destag="rowset-name" />
    <id-attribute support="no" />
    <tag-case support="no" />
    <null-indicator support="no" />
    <cnv:addattr name="debug" value="yes" />
    <cnv:addattr name="Attribute1" value="Value1" />
    </xsql:query>
    <xsql:no-rows-query support="no" child="no" />
    <responsedata support="no" child="yes" />
    <responsedata2 support="no" child="yes" />
    <page destag="page1" support="yes">
    <connection support="no" /> <debug destag="MyDebug" />
    <cnv:addattr name="tt" value="t1" />
    </page>
    <xsql:set-page-param support="yes" destag="setpageparam">
    <name destag="myname" />
    </xsql:set-page-param>
    <xsql:set-page-param-local support="yes" destag="Myset-page-param-local">
    <name destag="mylocalname" />
    </xsql:set-page-param-local>
    </cnv:conversion>
    </cnv:conversion>
    or like this....................
    <cnv:conversion xmlns:cnv="urn:ssis-conv" xmlns:xsql="urn:oracle-xsql">
    <cnv:roottag support="yes" destag="xfw:script">
    <cnv:addattr name="debug" value="no" />
    <cnv:addattr name="xmlns:xfw" value="urn:scb-xfw-v2" />
    </cnv:roottag>
    <cnv:roottag support="yes" destag="xfw:script">
    <cnv:addattr name="debug" value="no" />
    <cnv:addattr name="xmlns:xfw" value="urn:scb-xfw-v2" />
    </cnv:roottag>
    <xsql:query support="yes" destag="xfw:genxml">
    <connection support="no" />
    <row-element support="yes" destag="row-name" />
    <rowset-element support="yes" destag="rowset-name" />
    <id-attribute support="no" />
    <tag-case support="no" />
    <null-indicator support="no" />
    <cnv:addattr name="debug" value="yes" />
    <cnv:addattr name="Attribute1" value="Value1" />
    </xsql:query>
    <xsql:no-rows-query support="no" child="no" />
    <responsedata support="no" child="yes" />
    <responsedata2 support="no" child="yes" />
    <page destag="page1" support="yes">
    <connection support="no" /> <debug destag="MyDebug" />
    <cnv:addattr name="tt" value="t1" />
    </page>
    <xsql:set-page-param support="yes" destag="setpageparam">
    <name destag="myname" />
    </xsql:set-page-param>
    <xsql:set-page-param-local support="yes" destag="Myset-page-param-local">
    <name destag="mylocalname" />
    </xsql:set-page-param-local>
    </cnv:conversion>
    My java code is shown below :
    import java.io.*;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import org.w3c.dom.*;
    public class sample2
    public void processXML(String path)
    File docFile=new File(path);
    Document doc=null;
    try
    DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); DocumentBuilder db=dbf.newDocumentBuilder();
    doc=db.parse(docFile);
    catch(IOException ioe)
    System.out.println("cant find file");
    catch(Exception e)
    System.out.println("Error has occured");
    Element root=doc.getDocumentElement();
    NodeList children=root.getChildNodes();
    StringBuffer sbuf=new StringBuffer();
    for(Node child=root.getFirstChild(); child!=null; child=child.getNextSibling())
    if(child.getNodeType()==child.TEXT_NODE) sbuf.append(child.getNodeValue()) ;
    else if(child.getNodeType()==child.ELEMENT_NODE) if(child.getChildNodes()!=null)
    getnodes(child, sbuf);
    public void getnodes(Node Child, StringBuffer sbf)
    NodeList children=Child.getChildNodes();
    if(children.getLength() > 0)
    System.out.println(children.getLength() + Child.getNodeName());
    for(Node child=Child.getFirstChild(); child!=null;child=child.getNextSibling())
    if(child.getNodeType()==child.TEXT_NODE) sbf.append((child.getNodeValue()).trim());
    else if(child.getNodeType()==child.ELEMENT_NODE)
    if(child.getChildNodes()!=null)
    getnodes(child, sbf); sbf.append(";");
    public static void main(String[] args)
    testxml txml=new testxml();
    txml.processXML("E:\\Naresh\\conversion_fxsql.xml");
    can any body tell me how to validate the repeating tags (as i dont have dtd for this xml )with the given code.... if any one of the tags are repeating it should raise an exception thats its not a valid xml
    Thanks in advance
    Regards
    Bunny

    I suggest you create a DTD or a XSD file to validate your existing XML document, because it's easier that i looks, and will help in future changes.
    If you want to do it in Java code, you can always store each line of the XML file in some form (like a class) in a List, and the each time you read a line, you compare with everything on the list.
    But don't go that way, make a XSD file

  • JAVA XML Parsing

    i have an xml sturcture as shown below:
    <cnv:conversion xmlns:cnv="urn:ssis-conv" xmlns:xsql="urn:oracle-xsql">
         <cnv:roottag support="yes" destag="xfw:script">
              <cnv:addattr name="debug" value="no" />
              <cnv:addattr name="xmlns:xfw" value="urn:scb-xfw-v2" />
         </cnv:roottag>
         <xsql:query support="yes" destag="xfw:genxml">
              <connection support="no" />
              <row-element support="yes" destag="row-name" />
              <rowset-element support="yes" destag="rowset-name" />
              <id-attribute support="no" />
              <tag-case support="no" />
              <null-indicator support="no" />
              <cnv:addattr name="debug" value="yes" />
              <cnv:addattr name="Attribute1" value="Value1" />
         </xsql:query>
         <xsql:no-rows-query support="no" child="no" />
         <responsedata support="no" child="yes" />
         <responsedata2 support="no" child="yes" />
         <page destag="page1" support="yes">
              <connection support="no" /> <debug destag="MyDebug" />
              <cnv:addattr name="tt" value="t1" />
         </page>
         <xsql:set-page-param support="yes" destag="setpageparam">
              <name destag="myname" />
         </xsql:set-page-param>
         <xsql:set-page-param-local support="yes" destag="Myset-page-param-local">
              <name destag="mylocalname" />
         </xsql:set-page-param-local>
    </cnv:conversion>
    I want this xml to be validated by the dom parser which i had done and its showing it as valid XML.
    If there are any repeating tags like:
    <cnv:conversion xmlns:cnv="urn:ssis-conv" xmlns:xsql="urn:oracle-xsql">
    <cnv:conversion xmlns:cnv="urn:ssis-conv" xmlns:xsql="urn:oracle-xsql">
         <cnv:roottag support="yes" destag="xfw:script">
              <cnv:addattr name="debug" value="no" />
              <cnv:addattr name="xmlns:xfw" value="urn:scb-xfw-v2" />
         </cnv:roottag>
         <xsql:query support="yes" destag="xfw:genxml">
              <connection support="no" />
              <row-element support="yes" destag="row-name" />
              <rowset-element support="yes" destag="rowset-name" />
              <id-attribute support="no" />
              <tag-case support="no" />
              <null-indicator support="no" />
              <cnv:addattr name="debug" value="yes" />
              <cnv:addattr name="Attribute1" value="Value1" />
         </xsql:query>
         <xsql:no-rows-query support="no" child="no" />
         <responsedata support="no" child="yes" />
         <responsedata2 support="no" child="yes" />
         <page destag="page1" support="yes">
              <connection support="no" /> <debug destag="MyDebug" />
              <cnv:addattr name="tt" value="t1" />
         </page>
         <xsql:set-page-param support="yes" destag="setpageparam">
              <name destag="myname" />
         </xsql:set-page-param>
         <xsql:set-page-param-local support="yes" destag="Myset-page-param-local">
              <name destag="mylocalname" />
         </xsql:set-page-param-local>
    </cnv:conversion>
    </cnv:conversion>
    or like this....................
    <cnv:conversion xmlns:cnv="urn:ssis-conv" xmlns:xsql="urn:oracle-xsql">
         <cnv:roottag support="yes" destag="xfw:script">
              <cnv:addattr name="debug" value="no" />
              <cnv:addattr name="xmlns:xfw" value="urn:scb-xfw-v2" />
         </cnv:roottag>
    <cnv:roottag support="yes" destag="xfw:script">
              <cnv:addattr name="debug" value="no" />
              <cnv:addattr name="xmlns:xfw" value="urn:scb-xfw-v2" />
         </cnv:roottag>
         <xsql:query support="yes" destag="xfw:genxml">
              <connection support="no" />
              <row-element support="yes" destag="row-name" />
              <rowset-element support="yes" destag="rowset-name" />
              <id-attribute support="no" />
              <tag-case support="no" />
              <null-indicator support="no" />
              <cnv:addattr name="debug" value="yes" />
              <cnv:addattr name="Attribute1" value="Value1" />
         </xsql:query>
         <xsql:no-rows-query support="no" child="no" />
         <responsedata support="no" child="yes" />
         <responsedata2 support="no" child="yes" />
         <page destag="page1" support="yes">
              <connection support="no" /> <debug destag="MyDebug" />
              <cnv:addattr name="tt" value="t1" />
         </page>
         <xsql:set-page-param support="yes" destag="setpageparam">
              <name destag="myname" />
         </xsql:set-page-param>
         <xsql:set-page-param-local support="yes" destag="Myset-page-param-local">
              <name destag="mylocalname" />
         </xsql:set-page-param-local>
    </cnv:conversion>
    or any row is being repeated it not a valid XML....
    my java code is :
    My java code is shown below :
    import java.io.*;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import org.w3c.dom.*;
    public class sample2
         public void processXML(String path)
              File docFile=new File(path);
              Document doc=null;
              try
                   DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();                     DocumentBuilder db=dbf.newDocumentBuilder();
                   doc=db.parse(docFile);
              catch(IOException ioe)
                   System.out.println("cant find file");
              catch(Exception e)
                   System.out.println("Error has occured");
              Element root=doc.getDocumentElement();
              NodeList children=root.getChildNodes();
              StringBuffer sbuf=new StringBuffer();
              for(Node child=root.getFirstChild(); child!=null; child=child.getNextSibling())
                   if(child.getNodeType()==child.TEXT_NODE)                sbuf.append(child.getNodeValue()) ;
                   else if(child.getNodeType()==child.ELEMENT_NODE)                if(child.getChildNodes()!=null)
                   getnodes(child, sbuf);
    public void getnodes(Node Child, StringBuffer sbf)
         NodeList children=Child.getChildNodes();
         if(children.getLength() > 0)
              System.out.println(children.getLength() + Child.getNodeName());
         for(Node child=Child.getFirstChild(); child!=null;child=child.getNextSibling())
              if(child.getNodeType()==child.TEXT_NODE) sbf.append((child.getNodeValue()).trim());
         else if(child.getNodeType()==child.ELEMENT_NODE)
         if(child.getChildNodes()!=null)
              getnodes(child, sbf); sbf.append(";");
    public static void main(String[] args)
         testxml txml=new testxml(); txml.processXML("E:\\Naresh\\conversion_fxsql.xml");
    can any body tell me how to validate the repeating tags with the given code.... if any one of the tags are repeating it should raise an exception thats its not a valid xml
    Thanks in advance
    Regards
    Bunny

    The first problem about this document is that it contains a space at the very first position whereas <?xml... must appear at the very beginning of a document. I think this was the cause of the parsing fault.
    Also you have a dash before the root element of the document, which is illegal.

  • "character conversion error" while parsing xml files

    Hello,
    I'm trying to parse MusicXML (Recordare) files, but I'm getting an exception.
    I'm using the SAX parser (javax.xml.parsers.SAXParser).
    Here is the code I use to instantiate it:
    final javax.xml.parsers.SAXParserFactory saxParserFactory = javax.xml.parsers.SAXParserFactory.newInstance();
    final javax.xml.parsers.SAXParser saxParser = saxParserFactory.newSAXParser();
    final org.xml.sax.XMLReader parser = saxParser.getXMLReader();
    I'm using my own handler, but I get the same exception even if I use org.xml.sax.helpers.DefaultHandler.
    The error I get is:
    Character conversion error: "Illegal ASCII character, 0xc2" (line number may be too low).
    The first few lines of my xml files look like this:
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE score-partwise
    PUBLIC "-//Recordare//DTD MusicXML 0.6 Partwise//EN"
    "http://www.musicxml.org/dtds/partwise.dtd">
    <score-partwise>
    [...etc...]
    If I delete the <!DOCTYPE ...> line, then I don't get the exception anymore. But the MusicXML files I get (from some other program) always contain this line, and it would be quite some work to delete them from every file manually.
    So does anyone know if there is a way to avoid deleting that line in every file, while still being able to parse the xml files without exceptions?
    Or maybe does anyone know what the exact cause of the exception is? (because I don't know what exactly causes it)
    Thank you in advance.
    Greetz,
    Jipo

    So does anyone know if there is a way to avoid
    deleting that line in every file, while still being
    able to parse the xml files without exceptions?ok this is side-stepping the real problem but I've used this code to filterout DTD references for other reasons   public static InputStream filterOutDTDRef(InputStream in) throws IOException {
          BufferedReader iniReader = new BufferedReader(new InputStreamReader(in));
          StringBuffer newXML = new StringBuffer();
          for(String line = iniReader.readLine(); line!=null; line = iniReader.readLine())
             newXML.append(line+"\n");
          in.close();
          int s = newXML.indexOf("<!DOCTYPE ");
          if(s!=-1)
             newXML.replace(s,newXML.indexOf(">",s)+1,"");
          return new ByteArrayInputStream(newXML.toString().getBytes());
       }and it actually speeds up the parsing phase too (since the DTD ref.s were on the web and the XML standard mandates that there is a fetch for each xml file parsed..)
    you can feed the above into the InputSource constructor that takes an InputStream argument.
    Now for the real problem... 0xc2 is "LATIN CAPITAL LETTER A WITH CIRCUMFLEX" according to a unicode chart - which is not an ASCII character (as the error message correctly reports). I'm not sure why the file is being parsed as ASCII though? You could try parsing in a FileReader to the inputsource and hope it picks up the default character encoding of your system, and that that character encoding matches the file. Or you could try passing in a FileReader constructed with a explicit character encoding (eg "UTF8") and see if that does the trick?
    asjf

Maybe you are looking for

  • Asset depreciation for legacy data

    Hi, I encounter the following problem, please input some advices. An asset from legacy system needed to be migrated into SAP. In the old system, it starts to depreciate at rate of 20% per year, but after a period of time, it changes the depn. rate in

  • Can I measure a "body impression" on the surface of a mattress?

    Is there a sensor(s) that could measure the impression or "set" that can occur on the surface of a mattress. It would need to measure the majority of the surface (not just 1 point) and then ideally it could show a 3d volume of the impression in softw

  • Using iPhoto create a book. X-lg 100 pgs. Uploading for 4.5 hrs. Is this normal?

    Using iPhoto 08 I created an extra large photo book. The upload process began around 5pm. It is now close to 10pm. Is this normal?

  • Setting up The CLASSPATH

    I am trying to start my own package, however there was no classpath varable by default in the windows 2000 environment variables, I therefore created a user classpath variable and put the location of my package as a path, i have however had no succes

  • Why Oh Why does Apple make it so hard to get an simple answer on something-

    My main complaint is that Apple seems to go out of its way to put everything in categories for support help, and makes it very difficult to access a simple email access to support techs for questions that are not listed. Most recent example: I purcha