Niżej masz prosty przykład parsowania. Może Ci to pomoże.
<accounts>
<account>
<name>Witold</name>
<surname>Gombrowicz</surname>
<age>11</age>
</account>
<account>
<name>Adam</name>
<surname>Mickiewicz</surname>
<age>22</age>
</account>
<account>
<name>Bolesław</name>
<surname>Prus</surname>
<age>33</age>
</account>
</accounts>
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
class Account {
private String name;
private String surname;
private Integer age;
public void setName(String name) {
this.name = name;
}
public void setSurname(String surname) {
this.surname = surname;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Account{" +
"name='" + name + '\'' +
", surname='" + surname + '\'' +
", age=" + age +
'}';
}
}
class AccountSAXHandler extends DefaultHandler {
private List<Account> accounts;
private Account it;
private boolean isName = false;
private boolean isSurname = false;
private boolean isAge = false;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if("accounts".equals(qName) && accounts == null) {
accounts = new ArrayList<>();
} else if("account".equals(qName)) {
it = new Account();
} else if("name".equals(qName)) {
isName = true;
} else if("surname".equals(qName)) {
isSurname = true;
} else if("age".equals(qName)) {
isAge = true;
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if("account".equals(qName)) {
accounts.add(it);
} else if ("name".equals(qName)) {
isName = false;
} else if ("surname".equals(qName)) {
isSurname = false;
} else if ("age".equals(qName)) {
isAge = false;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if(isName) {
it.setName(new String(ch, start, length));
} else if (isAge) {
it.setAge(Integer.parseInt(new String(ch, start, length)));
} else if (isSurname) {
it.setSurname(new String(ch,start,length));
}
}
public List<Account> getAccounts() {
return accounts;
}
}
public class Runner {
public static void main(String[] args) {
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
try {
SAXParser saxParser = saxParserFactory.newSAXParser();
AccountSAXHandler accountSAXHandler = new AccountSAXHandler();
saxParser.parse(new File("accounts.xml"), accountSAXHandler);
List<Account> accounts = accountSAXHandler.getAccounts();
System.out.println(accounts);
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}
}
}
dodanie znacznika <code class="xml">
- @furious programming