package experiments.table.limaye; import org.apache.commons.lang3.StringEscapeUtils; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.Locator; import org.xml.sax.SAXException; public class LimayeAnnotationParserWebTables implements ContentHandler { private Table table; private StringBuilder currentValue; private boolean content; private boolean flag = false; private int column; private boolean firstRow = true; public LimayeAnnotationParserWebTables() { this.table = new Table(); this.content = false; this.column = -1; this.currentValue = new StringBuilder(); } @Override public void setDocumentLocator(Locator locator) { // TODO Auto-generated method stub } @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub } @Override public void startPrefixMapping(String prefix, String uri) throws SAXException { // TODO Auto-generated method stub } @Override public void endPrefixMapping(String prefix) throws SAXException { // TODO Auto-generated method stub } @Override public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { if (localName.equals("row")) { // table.addColumn(""); this.content = true; // column++; } if (localName.equals("text") && content) { flag = true; } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if(localName.equals("text") && this.firstRow && content) { table.addColumn(""); column++; String cellValue = escape(currentValue.toString()); table.getColumn(column).addCell(cellValue); currentValue = new StringBuilder(); flag = false; } if (localName.equals("text") && content && !this.firstRow) { column++; String cellValue = escape(currentValue.toString()); table.getColumn(column).addCell(cellValue); currentValue = new StringBuilder(); flag = false; } if (localName.equals("row")) { column = -1; this.content = false; if(firstRow) { firstRow = false; } } } @Override public void characters(char[] ch, int start, int length) throws SAXException { if (currentValue != null && flag) { for (int i = start; i < start + length; i++) { currentValue.append(ch[i]); } } } @Override public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub } @Override public void processingInstruction(String target, String data) throws SAXException { // TODO Auto-generated method stub } @Override public void skippedEntity(String name) throws SAXException { // TODO Auto-generated method stub } public Table getTable() { return table; } public static String removeAccents(String notNullSource) { return notNullSource; // return Normalizer.normalize(notNullSource, // Normalizer.Form.NFD).replaceAll( // "\\p{InCombiningDiacriticalMarks}+", ""); } private String escape(String s) { String val = StringEscapeUtils.unescapeHtml4(s); val = val.replaceAll("&", "&"); return val.replaceAll("'", "'"); } public static void main(String args[]) { String test = "'"; System.out.println(StringEscapeUtils.unescapeHtml4(test).replaceAll("'", "'")); } }