[英]How to read a large size xml file in Java StaX Xml parser?
<Product>
<Row1>97545214</Row1>
<Row2>
<value>01</value>
</Row2>
<Row4>
<number>1</number>
<role>A01</role>
<name>Paul </name>
</Row4>
<Row4>
<number>1</number>
<role>A01</role>
<name>James </name>
</Row4>
<Row4>
<number>1</number>
<role>A01</role>
<name>John </name>
</Row4>
<Row5>
<Code>01</Code>
<Measurement>9.00</Measurement>
<UnitCode>in</UnitCode>
</Row5>
<Row5>
<Code>02</Code>
<Measurement>6.00</Measurement>
<UnitCode>in</UnitCode>
</Row5>
<Row5>
<Code>03</Code>
<Measurement>1.09</Measurement>
<UnitCode>in</UnitCode>
</Row5>
<Row7>
<price>
<Code>01</PriceTypeCode>
<Amount>62.95</Amount>
<currency>USD</currency>
</Price>
</Row7>
<Row7>
<price>
<Code>01</PriceTypeCode>
<Amount>62.95</Amount>
<currency>USD</currency>
</Price>
如何在Java StaX解析器中讀取此xml。 這是示例xml。 原始文件大小超過2 GB。 所以只有我去StaX解析器。 我的Java類是BulkFileReader.java
public class BulkFileReader {
public static void main(String[] args) throws ClassNotFoundException, XMLStreamException, FileNotFoundException {
String fileName = "E:\\Arunselvan\\D2 to D5\\xml files\\combine.xml";
List<BookSpecBean> bookspec = (List<BookSpecBean>) parseXML(fileName);
for(BookSpecBean bean : bookspec){
System.out.println("The Row1="+bean.row1);
System.out.println("The Row2="+bean.row2);
System.out.println("The Number="+bean.number);
System.out.println("The Role="+bean.role);
System.out.println("The Name="+bean.name);
System.out.println("The code="+bean.code);
System.out.println("The amount="+bean.amount);
System.out.println("The currency="+bean.currency);
System.out.println("===========================================");
new Query().InsertMetaData1(bean);
}
System.out.println("XML Completed Successfully");
}
private static List<BookSpecBean> parseXML(String fileName) {
List<BookSpecBean> empList = new ArrayList<>();
BookSpecBean emp = null;
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
xmlInputFactory.setProperty(XMLInputFactory.IS_COALESCING, true);
try {
XMLEventReader xmlEventReader = xmlInputFactory.createXMLEventReader(new FileInputStream(fileName));
while(xmlEventReader.hasNext()){
XMLEvent xmlEvent = xmlEventReader.nextEvent();
if (xmlEvent.isStartElement()){
StartElement startElement = xmlEvent.asStartElement();
if(startElement.getName().getLocalPart().equals("Product")){
emp = new BookSpecBean();
}
}
//set the other varibles from xml elements
else if(startElement.getName().getLocalPart().equals("Row1")){
xmlEvent = xmlEventReader.nextEvent();
emp.setRow1(xmlEvent.asCharacters().getData());
}
else if(startElement.getName().getLocalPart().equals("Row2")){
xmlEvent = xmlEventReader.nextEvent();
emp.setRow2(xmlEvent.asCharacters().getData().replace("'", ""));
}
String qname = startElement.getName().getLocalPart();
if(qname.equalsIgnoreCase("Row4")){
xmlEvent = xmlEventReader.nextEvent();
}
else if(startElement.getName().getLocalPart().equals("number")){
xmlEvent = xmlEventReader.nextEvent();
emp.setnumber(xmlEvent.asCharacters().getData());
}
else if(startElement.getName().getLocalPart().equals("role")){
xmlEvent = xmlEventReader.nextEvent();
emp.setrole(xmlEvent.asCharacters().getData());
}
else if(startElement.getName().getLocalPart().equals("name")){
xmlEvent = xmlEventReader.nextEvent();
emp.setname(xmlEvent.asCharacters().getData());
}
}
if(xmlEvent.isEndElement()){
EndElement endElement = xmlEvent.asEndElement();
if(endElement.getName().getLocalPart().equals("Row4")){
empList.add(emp);
}
}
else if(startElement.getName().getLocalPart().equals("code")){
xmlEvent = xmlEventReader.nextEvent();
emp.setcode(xmlEvent.asCharacters().toString());
}
else if(startElement.getName().getLocalPart().equals("Amount")){
xmlEvent = xmlEventReader.nextEvent();
emp.setamount(xmlEvent.asCharacters().getData());
}
else if(startElement.getName().getLocalPart().equals("currency")){
xmlEvent = xmlEventReader.nextEvent();
emp.setcurrency(xmlEvent.asCharacters().getData());
}
}
//if Employee end element is reached, add employee object to list
if(xmlEvent.isEndElement()){
EndElement endElement = xmlEvent.asEndElement();
if(endElement.getName().getLocalPart().equals("Product")){
empList.add(emp);
}
}
}
} catch (FileNotFoundException | XMLStreamException e) {
e.printStackTrace();
}
return empList;
}
}
我使用此Java代碼從xml標記中檢索值。 我能夠檢索第三個<row4>
值。 其余的<row4>
標記值無法檢索。 請幫助我從所有<row4>
標記和<row7>
在此先感謝您回答這個問題。
如果您使用的是JaxB
, 則無需自己解析XML文件 ,這就是制作JaxB
的原因! :)
使用JaxB
/ Unmarshaller
和XSD
讀寫xml的基本步驟
XML
結構的有效 XSD
文件。 XSD
文件並自動生成JAXB類 。 使用Unmarshaller
從XML文件填充自動生成的類:
JAXBContext jc = JAXBContext.newInstance(Product.class); String fileName = "E:\\\\Arunselvan\\\\D2 to D5\\\\xml files\\\\combine.xml"; Unmarshaller u = jc.createUnmarshaller(); Product product = (Product) u.unmarshal(new FileInputStream(filename));
就是這樣... JaxB
將處理類,屬性,填充,寫入/讀取xml。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.