JAXB рдФрд░ XSLT StAX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░

рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╕реИрдХрдбрд╝реЛрдВ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд╕реЗ рджрд╕рд╡реЗрдВ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рддрдХ рдмрдбрд╝реА рдПрдХреНрд╕рдПрдордПрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рднрд┐рдиреНрди "рдЧрд╣рд░рд╛рдИ" рдкрд░ рд╕реНрдерд┐рдд рдХреЗрд╡рд▓ рдХреБрдЫ рдЯреИрдЧреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред XSLT "рдорд╛рдереЗ рдореЗрдВ" рд╕реНрдореГрддрд┐ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рдЯреВрдЯ рдЧрдпрд╛ред рдореБрдЭреЗ рд╕реНрдЯреНрд░реАрдо рдкрд╛рд░реНрд╕рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдФрд░ рдпрд╛рдж рд░рдЦрдирд╛ рдерд╛ред

рдХрдИ XML рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдореЙрдбрд▓ рд╣реИрдВред рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдбреЛрдо рдФрд░ рдПрд╕рдПрдПрдХреНрд╕ рд╣реИрдВред
DOM рдкреВрд░реЗ XML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдкреВрд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред SAX, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрдирдкреБрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░, рдЬрдм рдХреЛрдИ рддрддреНрд╡ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмреБрд▓рд╛рддрд╛ рд╣реИред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдХреЗ рдХрд╛рд░рдг рдбреЛрдо рдЧрд┐рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдПрд╕рдПрдПрдХреНрд╕ рдПрдкреАрдЖрдИ рд╣реИрдВрдбрд▓рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрдо рдкрдардиреАрдп рдХреЛрдб рд╣реИред Stax рдПрдХ рд╕реНрдЯреНрд░реАрдо рдкрд╛рд░реНрд╕рд░ (SAX рдХреА рддрд░рд╣) рд╣реИ, рд▓реЗрдХрд┐рди рдПрдкреАрдЖрдИ рдкреБрд▓ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рддрддреНрд╡ рдорд╛рдВрдЧ рдкрд░ рдзрд╛рд░рд╛ рд╕реЗ "рд╣рдЯрд╛" рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдЪреВрдВрдХрд┐ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдврд╛рдВрдЪреЗ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдФрд░ рд╡рд┐рд╡рд┐рдз рдереЗ, рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рдлреА рдЧреИрд░-рддреБрдЪреНрдЫ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП JAXB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдбреЗрдЯрд╛ рдПрдирдбреАрдП рджреНрд╡рд╛рд░рд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд▓реЗрдЦ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдФрд░ рдЗрд╕рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ
XML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝
<data> <dtype_one> <p1>p1_data_1</p1> <p2>p1_data_1</p2> <p3>p1_data_1</p3> <p4>p1_data_1</p4> <p5>p1_data_1</p5> </dtype_one> <dtype_two> <p1>p1_data_2</p1> <p2>p1_data_2</p2> <p3>p1_data_2</p3> <p4>p1_data_2</p4> <p5>p1_data_2</p5> </dtype_two> <WS> <dtype_three> <p1>p1_data_3</p1> <p2>p1_data_3</p2> <p3>p1_data_3</p3> <p4>p1_data_3</p4> <p5>p1_data_3</p5> </dtype_three> </WS> </data> 

рдЗрд╕рдореЗрдВ рд╕реЗ рдЖрдкрдХреЛ dtype_one, dtype_two рдФрд░ dtype_three рдЯреИрдЧ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЯреИрдЧ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдирд╛
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рд░реВрдкрд░реЗрдЦрд╛
 <?xml version="1.0" encoding="UTF-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="data" type="dataType"/> <xs:element name="dtype_one" type="dtype_oneType"/> <xs:element name="dtype_two" type="dtype_twoType"/> <xs:element name="dtype_three" type="dtype_threeType"/> <xs:complexType name="dtype_oneType"> <xs:sequence> <xs:element type="xs:string" name="p1"/> <xs:element type="xs:string" name="p2"/> <xs:element type="xs:string" name="p3"/> <xs:element type="xs:string" name="p4"/> <xs:element type="xs:string" name="p5"/> </xs:sequence> </xs:complexType> <xs:complexType name="dataType"> <xs:sequence> <xs:element type="dtype_oneType" name="dtype_one"/> <xs:element type="dtype_twoType" name="dtype_two"/> <xs:element type="WSType" name="WS"/> </xs:sequence> </xs:complexType> <xs:complexType name="WSType"> <xs:sequence> <xs:element type="dtype_threeType" name="dtype_three"/> </xs:sequence> </xs:complexType> <xs:complexType name="dtype_twoType"> <xs:sequence> <xs:element type="xs:string" name="p1"/> <xs:element type="xs:string" name="p2"/> <xs:element type="xs:string" name="p3"/> <xs:element type="xs:string" name="p4"/> <xs:element type="xs:string" name="p5"/> </xs:sequence> </xs:complexType> <xs:complexType name="dtype_threeType"> <xs:sequence> <xs:element type="xs:string" name="p1"/> <xs:element type="xs:string" name="p2"/> <xs:element type="xs:string" name="p3"/> <xs:element type="xs:string" name="p4"/> <xs:element type="xs:string" name="p5"/> </xs:sequence> </xs:complexType> </xs:schema> 


рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдЯреИрдЧ рдХреЗ "рддрддреНрд╡" рддрддреНрд╡ рд╣реИрдВ:
  <xs:element name="dtype_one" type="dtype_oneType"/> <xs:element name="dtype_two" type="dtype_twoType"/> <xs:element name="dtype_three" type="dtype_threeType"/> 

рдпрджрд┐ рдХреЛрдИ рд╕реНрдХреАрдорд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ IDEA рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ xml рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ XJC рдХреЗ рд▓рд┐рдП @XmlRootElement рдПрдиреЛрдЯреЗрд╢рди рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ ред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ maven рдЬрд╛ рд░рд╣рд╛ рд╣реИ, maven-jaxb2-plugin рдХрд╛ рдЙрдкрдпреЛрдЧ XJC рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдХреАрдорд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА "рддрддреНрд╡" рдХреЗ рд▓рд┐рдП @XmlRootElement рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрдиреЛрдВ рдХреЛ bindings.xjb рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
 <jaxb:bindings> <jaxb:globalBindings > <xjc:simple/> </jaxb:globalBindings> </jaxb:bindings> 

рдФрд░ рдЗрд╕реЗ pom.xml рдореЗрдВ рдкреНрд▓рдЧрдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рд╡реЗрди-рдЬрдХреНрд╕рдм 2-рдкреНрд▓рдЧрдЗрди рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
 <bindingDirectory>${project.basedir}/xjb</bindingDirectory> 

рдЕрдм, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдб рдХреЗ рд▓рд┐рдП, TagEngine рд╡рд░реНрдЧ рдЯреИрдЧ рд╣реИрдВрдбрд▓рд░ рдХреА рд╕реВрдЪреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ :
  public void process(InputStream inputStream) throws FileNotFoundException, XMLStreamException, TransformerException { //  XMLStreamReader,   XMLInputFactory factory = XMLInputFactory.newFactory(); XMLStreamReader streamReader = factory.createXMLStreamReader(inputStream); //   Stack<String> tagStack = new Stack<String>(); //    while (streamReader.hasNext()) { //   int eventType = streamReader.next(); //    if(eventType == XMLStreamConstants.START_ELEMENT) { //    tagStack.push(streamReader.getName().toString()); //     TagProcessor t = processorMap.get(tagStack); if(t != null) { // ,  t.process(streamReader); tagStack.pop(); } } else if(eventType == XMLStreamConstants.END_ELEMENT) { tagStack.pop(); } } } 

JAXBProcessor рд╡рд░реНрдЧ рдЪрдпрдирд┐рдд рддрддреНрд╡реЛрдВ рдХреЛ рдЕрдирдорд░реНрд╢ рдХрд░рддрд╛ рд╣реИред XSLTProcessor рд╡рд░реНрдЧ XSLT рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╡рд░реНрдЧ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
 public class DataOne extends JAXBProcessor<DtypeOne> { private static final String TAG_NAME = "data/dtype_one"; //  public DataOne() throws JAXBException, SAXException { super(DtypeOne.class, TAG_NAME); } //       public DataOne(String schemaFileName) throws JAXBException, SAXException { super(DtypeOne.class, TAG_NAME, schemaFileName); } //     XML  @Override public void doWork(DtypeOne element) { // System.out.println(element.getP1()); } } 

XSLT DataThreeXSLT рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЙрджрд╛рд╣рд░рдгред

рд▓реЙрдиреНрдЪ рдЙрджрд╛рд╣рд░рдг (277 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рдВрд╕рд╛рдзрди рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИ):
 рд╕реНрдХреАрдорд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмрд┐рдирд╛ JAXB рдЕрдирдорд░рд╢реЙрд▓
 рд░рдирдЯрд╛рдЗрдо: 8034ms, 277000015 рдмрд╛рдЗрдЯреНрд╕ рд╕рдВрд╕рд╛рдзрд┐рдд
 рдкреНрд░рдпреБрдХреНрдд рдореЗрдореЛрд░реА: 80 рдПрдордмреА
 рд╕реНрдХреАрдорд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде JAXB рдЕрдирдорд░рд╢рд╛рд▓
 рд░рдирдЯрд╛рдЗрдо: 66180ms, 277000015 рдмрд╛рдЗрдЯреНрд╕ рд╕рдВрд╕рд╛рдзрд┐рдд
 рдкреНрд░рдпреБрдХреНрдд рдореЗрдореЛрд░реА: 56 рдПрдордмреА
 XSLT рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
 рд░рдирдЯрд╛рдЗрдо: 10604ms, 277000015 рдмрд╛рдЗрдЯреНрд╕ рд╕рдВрд╕рд╛рдзрд┐рдд
 рдкреНрд░рдпреБрдХреНрдд рдореЗрдореЛрд░реА: 231 рдПрдордмреА

рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реИ, рдХреЛрд░реНрд╕ рдХреА рд╡реИрд▓рд┐рдбреЗрд╢рди рдмрд╣реБрдд рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддреА рд╣реИред

рдкреБрдирд╢реНрдЪред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдореЙрдХрд┐рдЯреЛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ (рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЬреЙрдХреЙрдХ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛)ред рдореБрдЭреЗ рдПрдХ рд▓рд╛рдЗрд╡ (рдореЙрдХ) рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЬрд╛рд╕реВрд╕ - рдЕрд╡рд░реЛрдзрди рдХреЙрд▓ рдФрд░ рдЙрдирдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд╕рдВрдж рдЖрдИред
рдкреА рдкреА рдПрд╕ред GitHub рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдбред

Source: https://habr.com/ru/post/In185360/


All Articles