Thanks to everyone here shared my solution that works for my code
I try to make it universal, each namespace contains a ":" I write code, if any tag has a ":" it will be deleted from XML.
This is used to skip namespace during unmarshalling using jaxb.
public class NamespaceFilter { private NamespaceFilter() { } private static final String COLON = ":"; public static XMLReader nameSpaceFilter() throws SAXException { XMLReader xr = new XMLFilterImpl(XMLReaderFactory.createXMLReader()) { private boolean skipNamespace; @Override public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { if (qName.indexOf(COLON) > -1) { skipNamespace = true; } else { skipNamespace = false; super.startElement("", localName, qName, atts); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if (qName.indexOf(COLON) > -1) { skipNamespace = true; } else { skipNamespace = false; super.endElement("", localName, qName); } } @Override public void characters(char[] ch, int start, int length) throws SAXException { if (!skipNamespace) { super.characters(ch, start, length); } } }; return xr; } }
to expose
XMLReader xr = NamespaceFilter.nameSpaceFilter(); Source src = new SAXSource(xr, new InputSource("filePath")); StringWriter sw = new StringWriter(); Result res = new StreamResult(sw); TransformerFactory.newInstance().newTransformer().transform(src, res); JAXBContext jc = JAXBContext.newInstance(Tab.class); Unmarshaller u = jc.createUnmarshaller(); String done = sw.getBuffer().toString(); StringReader reader = new StringReader(done); Tab tab = (Tab) u.unmarshal(reader); System.out.println(tab);
Binal parekh
source share