#xml #string #format #sax #saxparser
Вопрос:
Я совершенно новичок в форматировании xml. Я сталкиваюсь с требованием, когда мне нужно отформатировать xml с отступом и более простым способом из входного xml в виде строки. Я предоставляю здесь входные данные и необходимые выходные данные. Пожалуйста, помогите мне, как работать с SAXParser.
Введите xml в виде строки
String inputXml = "lt;?xml version="1.0" encoding="utf-8"?gt;lt;STUDENT xmlns="com/demo/student/gmfV2.08"gt;lt;STUDENT_1gt;lt;STUDENTDETAILSgt;lt;NAMEgt;Alexlt;/NAMEgt;lt;AGEgt;21lt;/AGEgt;lt;/STUDENTDETAILSgt;lt;STUDENTADDRESSgt;lt;ADDRESSgt;Texaslt;/ADDRESSgt;lt;/STUDENTADDRESSgt;lt;STUDENTREGNOgt;lt;REGNOgt;3100012lt;/REGNOgt;lt;REGYRgt;2019lt;/REGYRgt;lt;/STUDENTREGNOgt;lt;DEPARTMENTgt;lt;DEPARTMENTNAMEgt;Philosopylt;/DEPARTMENTNAMEgt;lt;/DEPARTMENTgt;lt;/STUDENT_1gt;lt;/STUDENTgt;";
Необходимый выходной xml
lt;STUDENT xmlns="com/demo/student/gmfV2.08"gt; lt;STUDENT_1gt; lt;STUDENTDETAILSgt; lt;NAMEgt;Alexlt;/NAMEgt; lt;AGEgt;21lt;/AGEgt; lt;/STUDENTDETAILSgt; lt;STUDENTADDRESSgt; lt;ADDRESSgt;Texaslt;/ADDRESSgt; lt;/STUDENTADDRESSgt; lt;STUDENTREGNOgt; lt;REGNOgt;3100012lt;/REGNOgt; lt;REGYRgt;2019lt;/REGYRgt; lt;/STUDENTREGNOgt; lt;DEPARTMENTgt; lt;DEPARTMENTNAMEgt;Philosopylt;/DEPARTMENTNAMEgt; lt;/DEPARTMENTgt; lt;/STUDENT_1gt;
Если кто-нибудь может, пожалуйста, выложите весь фрагмент кода с помощью SAXParser, который будет работать.
В настоящее время он использует TransformerFactory, как показано ниже :
public static String formatXml(String xml){ System.out.println("gt;gt;gt; Inside rcxmlutility formatXml()-gt;" "n" xml); ByteArrayInputStream byteArrayInputStream =null; String inputXml = xml; String retXml = ""; if (xml==null) { System.out.println("xml was null in prettyPrint()"); retXml = xml; } else if(xml.isEmpty()){ System.out.println("xml was blank in prettyPrint()"); retXml = xml; }else{ try{ TransformerFactory factory = SAXTransformerFactory.newInstance(); factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); Transformer serializer = factory.newTransformer(); serializer.setOutputProperty(OutputKeys.INDENT, "yes"); serializer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); serializer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); byteArrayInputStream = new ByteArrayInputStream(inputXml.getBytes()); Source xmlSource=new SAXSource(new InputSource(byteArrayInputStream)); StringWriter writer = new StringWriter(); StreamResult res = new StreamResult(writer); serializer.transform(xmlSource, res); retXml = writer.toString(); }catch(TransformerException e){ System.out.println("Error in generating XML -- TransformerException" e); retXml = xml; }catch(Exception e){ System.out.println("Error in generating XML -- TransformerException" e); retXml = xml; }finally{ if(null!=byteArrayInputStream){ try { byteArrayInputStream.close(); } catch (IOException e) { System.out.println("Exception while closing InputStream ::" e); } } } } System.out.println("lt;lt;lt; Exitting rcxmlutility formatXml()-gt;" "n" retXml); return retXml; }
Пожалуйста, предложите аналогичную реализацию SAXParser для кода.Форматированный xml, необходимый для ввода xml в виде строки с помощью SAXParserFactory.