本次例子中,xml存储于本地,
<?xml version="1.0" ?>
<PCXRF_MULTI_FORMAT>
<PCXRF_USER_FORMAT>
<FileInfo>
<DataVersion>
<Major>0</Major>
<Minor>0</Minor>
<Release>7</Release>
</DataVersion>
<SampleName>0140中</SampleName>
<AnalType>QN</AnalType>
<Comment>AAAA</Comment>
<ParFLN>2-aaaa</ParFLN>
<MeasDateStr>2024-12-12 23:59:59</MeasDateStr>
<Operator></Operator>
</FileInfo>
<ResQuan_Aver ChanNum="21" SampleForm="Bulk" >
<ResQuan_Aver_Chan Number="1">
<CompName>TFe</CompName>
<Conc> 48.00</Conc>
<Unit>%</Unit>
<LH></LH>
<ProcType>Quant.-EC</ProcType>
<Elem>Fe</Elem>
<Line>Ka</Line>
<Net_Inten>3.9411</Net_Inten>
<BG_Inten>0.0000</BG_Inten>
<LayerNum>1</LayerNum>
<LayerInfo>Elem</LayerInfo>
</ResQuan_Aver_Chan>
<ResQuan_Aver_Chan Number="2">
<CompName>CaO</CompName>
<Conc>0.03</Conc>
<Unit>%</Unit>
<LH></LH>
<ProcType>Quant.-EC</ProcType>
<Elem>Ca</Elem>
<Line>Ka</Line>
<Net_Inten>0.4185</Net_Inten>
<BG_Inten>0.0000</BG_Inten>
<LayerNum>1</LayerNum>
<LayerInfo>Elem</LayerInfo>
</ResQuan_Aver_Chan>
</ResQuan_Aver>
</PCXRF_USER_FORMAT>
</PCXRF_MULTI_FORMAT>
代码:
public void start() {
try {
File xmlFile = new File(LOCAL_XML_PATH);
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
SAXParserHandler handler = new SAXParserHandler();
saxParser.parse(xmlFile, handler);
Result result = handler.getResult();
log.info("result:{}",result);
} catch (ParserConfigurationException | SAXException | IOException e) {
log.error("解析xml出错:{}",e.getMessage());
}
}
代码:
public static class SAXParserHandler extends DefaultHandler {
private String value = "";
private final FileInfo fileInfo = new FileInfo();
private AnalyseData analyseData = null;
private final List<AnalyseData> analyseDataList = new ArrayList<>();
private final Result result = new Result();
public Result getResult() {
result.setFileInfo(fileInfo);
result.setAnalyseDataList(analyseDataList);
return result;
}
@Override
public void startDocument() throws SAXException {
System.out.println("SAX解析开始...");
}
@Override
public void endDocument() throws SAXException {
System.out.println("SAX解析结束======");
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equals("ResQuan_Aver_Chan")) {
analyseData = new AnalyseData();
int num = attributes.getLength();
for (int i = 0; i < num; i++) {
if (attributes.getQName(i).equals("Number")) {
analyseData.setNumber(attributes.getValue(i));
}
}
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// info
if (qName.equals("SampleName")) {
fileInfo.setSampleName(value);
}
if (qName.equals("AnalType")) {
fileInfo.setAnalType(value);
}
if (qName.equals("Comment")) {
fileInfo.setComment(value);
}
if (qName.equals("ParFLN")) {
fileInfo.setParFLN(value);
}
if (qName.equals("MeasDateStr")) {
fileInfo.setMeasDateStr(value);
}
if (qName.equals("Operator")) {
fileInfo.setOperator(value);
}
// data
if (qName.equals("CompName")) {
analyseData.setCompName(value);
}
if (qName.equals("Conc")) {
analyseData.setConc(value);
}
if (qName.equals("Unit")) {
analyseData.setUnit(value);
}
if (qName.equals("LH")) {
analyseData.setLh(value);
}
if (qName.equals("ProcType")) {
analyseData.setProcType(value);
}
if (qName.equals("Elem")) {
analyseData.setElem(value);
}
if (qName.equals("Line")) {
analyseData.setLine(value);
}
if (qName.equals("Net_Inten")) {
analyseData.setNetInten(value);
}
if (qName.equals("BG_Inten")) {
analyseData.setBGInten(value);
}
if (qName.equals("LayerNum")) {
analyseData.setLayerNum(value);
}
if (qName.equals("LayerInfo")) {
analyseData.setLayerInfo(value);
}
if(qName.equals("ResQuan_Aver_Chan")){
analyseDataList.add(analyseData);
analyseData = null;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
this.value = new String(ch, start, length);
}
}