我想使用“SAXParser”将任何XML文件解析为“XMLNode”类的对象列表
XMLNode类
public class XMLNode {
private String nodeName;
private String nodeValue;
private List<XMLNodeAttribute> attributes;
private boolean isParentNode;
private List<XMLNode> childNodes;
//.... getters and setters ....
}
XMLNodeAttribute类
public class XMLNodeAttribute {
private String name;
private String value;
//.... getters and setters ....
}
请帮我编写解析器类,它可以将输入作为XML文件输出并输出List。
提前谢谢你。
我能写一些代码..
public class XmlProcesser extends DefaultHandler {
XMLResponse xmlResponse = null;
List<XMLNode> resplist = new ArrayList();
List<XMLNode> temp = new ArrayList();
boolean endtag = false;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
String elementName = localName;
if ("".equals(elementName)) {
elementName = qName;
}
System.out.println(" Start Ele - " + elementName );
//Each attribute
if (elementName!=null) {
if (attributes!=null) {
for (int pos=0; pos<attributes.getLength(); pos++) {
String name = attributes.getLocalName(pos)==null || attributes.getLocalName(pos).trim().length()==0 ? attributes.getQName(pos) : attributes.getLocalName(pos);
String value= attributes.getValue(pos);
System.out.println(" name - " + name + " value - " + value );
}
}
}
}
@Override
public void characters(char ch[], int start, int length) throws SAXException {
String s = new String(ch, start, length);
System.out.println(" value - " + s );
endtag = false;
}
@Override
public void endElement(String uri, String localName,
String qName) throws SAXException {
endtag = true;
String elementName = localName;
if ("".equals(elementName)) {
elementName = qName;
}
System.out.println(" End Ele - " + elementName );
}
}
答案 0 :(得分:2)
您可以使用JAXB的UnmarshallerHandler
来实现此用例:
JAXBContext jc = JAXBContext.newInstance(XmlNode.clas);
Unmarshaller unmarshaller = jc.createUnmarshaller();
UnmarshallerHandler handler = unmarshaller.getUnmarshallerHandler();
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
xr.setContentHandler(handler);
xr.parse(xml);
XmlNode xmlNode = (XmlNode) handler.getResult();
完整示例