我无法解析以下XML。由于子节点<plmn></plmn>
有多个条目,因此我无法读取所有值:
<root>
<EnbProfile>
<Name>H1K-SAM_untag</Name>
<Hardware>armony1000</Hardware>
<PlmnList>
<Plmn>
<Mcc>312</Mcc>
<Mnc>198</Mnc>
</Plmn>
<Plmn>
<Mcc>389</Mcc>
<Mnc>156</Mnc>
</Plmn>
</PlmnList>
</EnbProfile>
<EnbProfile>
<Name>SAM_untag</Name>
<Hardware>Armony1001</Hardware>
<PlmnList>
<Plmn>
<Mcc>310</Mcc>
<Mnc>120</Mnc>
</Plmn>
<Plmn>
<Mcc>312</Mcc>
<Mnc>190</Mnc>
</Plmn>
</PlmnList>
</EnbProfile>
</root>
我是SAX解析的新手。任何人都可以帮我解决这个问题。我想阅读所有父节点和多个子节点。
答案 0 :(得分:0)
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException;
public class XMLParserSAX {
public static void main(String[] args) {
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
try {
SAXParser saxParser = saxParserFactory.newSAXParser();
MyHandler handler = new MyHandler();
saxParser.parse(new File("D:/Projects/AadhaarOfflineVerification/app/src/main/assets/data.xml"), handler);
List<MyHandler.Data> dataList=handler.getDataList();
for (MyHandler.Data data:dataList) {
System.out.println("Data "+data);
}
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}
}
}
答案 1 :(得分:0)
import java.util.ArrayList;导入java.util.List;
import org.xml.sax.Attributes;导入org.xml.sax.SAXException;进口 org.xml.sax.helpers.DefaultHandler;
公共类MyHandler扩展了DefaultHandler {
private StringBuilder data = null; public List<Data> getDataList() { return dataList; } private List<Data> dataList=null; private List<String> mccList=null; private List<String> mncList=null; private Data dataClass=null; boolean bNames=false; boolean bHardwares=false; boolean bMcc=false; boolean bMnc=false; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equalsIgnoreCase("Name")) { bNames=true; dataClass=new Data(); if (dataList==null) { dataList=new ArrayList<>(); } }else if (qName.equalsIgnoreCase("Hardware")) { bHardwares=true; }else if (qName.equalsIgnoreCase("Mcc")) { bMcc=true; if (mccList==null) { mccList=new ArrayList<>(); } }else if (qName.equalsIgnoreCase("Mnc")) { bMnc=true; if (mncList==null) { mncList=new ArrayList<>(); } } data = new StringBuilder(); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if (bNames) { dataClass.setNames(data.toString()); bNames=false; }else if (bHardwares) { dataClass.setHardwares(data.toString()); bHardwares=false; }else if (bMcc) { mccList.add(data.toString()); bMcc=false; }else if (bMnc) { mncList.add(data.toString()); bMnc=false; } if (qName.equalsIgnoreCase("Plmn")) { dataClass.setMccList(mccList); dataClass.setMncList(mncList); } if (qName.equalsIgnoreCase("Name")) { dataList.add(dataClass); } } @Override public void characters(char ch[], int start, int length) throws SAXException { data.append(new String(ch, start, length)); } class Data { private String names; private String hardwares; private List<String> mccList; private List<String> mncList; public String getNames() { return names; } public void setNames(String names) { this.names = names; } public String getHardwares() { return hardwares; } public void setHardwares(String hardwares) { this.hardwares = hardwares; } public List<String> getMccList() { return mccList; } public void setMccList(List<String> mccList) { this.mccList = mccList; } public List<String> getMncList() { return mncList; } public void setMncList(List<String> mncList) { this.mncList = mncList; } @Override public String toString() { return "Data:: Name="+this.names+" Hardware="+this.hardwares+" Mcc List="+mccList.toString()+" Mnc
List =“ + mncList.toString(); } }