生活随笔
收集整理的這篇文章主要介紹了
Java解析XMl文件之SAX和DOm方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如題,這兩種方法的jar包都在jdk中,不需要下載。
先來說下目錄結構:
首先建一個Peron類封裝person.xml的屬性;DomParseService和SaxParseService分別為兩種解析方法的服務類。最后TestXml為測試類。
Person.xml如下:
1 <?xml version="1.0" encoding="gbk"?>
2 <Persons>
3 <Person id="1">
4 <name>zhangsan
</name>
5 <sex>男
</sex>
6 <age>30
</age>
7 </Person>
8 <Person id="2">
9 <name>lisi
</name>
10 <sex>女
</sex>
11 <age>20
</age>
12 </Person>
13 </Persons> View Code ?
?
1 public class SaxParseService
extends DefaultHandler {
2 private List<Person> mPersons =
null;
3 private Person mPerson =
null;
4 private String m_preTag =
null;
5
6 public List<Person>
getPersons(InputStream xmlStream)
7 throws ParserConfigurationException, SAXException, IOException {
8 SAXParserFactory factory =
SAXParserFactory.newInstance();
9 SAXParser parser =
factory.newSAXParser();
10 SaxParseService handler =
new SaxParseService();
11 parser.parse(xmlStream, handler);
12 return handler.getPersons();
13 }
14
15 private List<Person>
getPersons() {
16 return mPersons;
17 }
18
19 @Override
20 public void startDocument()
throws SAXException {
21 mPersons =
new ArrayList<Person>
();
22 }
23
24 @Override
25 public void startElement(String uri, String localName, String qName,
26 Attributes attributes)
throws SAXException {
27 if ("Person"
.equals(qName)) {
28 mPerson =
new Person();
29 mPerson.setId(Integer.parseInt(attributes.getValue(0
)));
30 }
31 m_preTag =
qName;
32 }
33
34 @Override
35 public void endElement(String uri, String localName, String qName)
36 throws SAXException {
37 if ("Person"
.equals(qName)) {
38 mPersons.add(mPerson);
39 mPerson =
null;
40 }
41 m_preTag =
null;
42 }
43
44 @Override
45 public void characters(
char[] ch,
int start,
int length)
46 throws SAXException {
47 if (m_preTag !=
null) {
48 String content =
new String(ch, start, length);
49 if ("name"
.equals(m_preTag)) {
50 mPerson.setName(content);
51 }
else if ("sex"
.equals(m_preTag)) {
52 mPerson.setSex(content);
53 }
else if ("age"
.equals(m_preTag)) {
54 mPerson.setAge(Integer.parseInt(content));
55 }
56 }
57 }
58
59 }
View Code 1 public class DomParseService {
2 public List<Person>
getPersons(InputStream is)
3 throws ParserConfigurationException, SAXException, IOException {
4 List<Person> mPersons =
new ArrayList<Person>
();
5 DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
6 DocumentBuilder builder =
factory.newDocumentBuilder();
7 Document element =
builder.parse(is);
8 NodeList PersonNodes = element.getElementsByTagName("Person"
);
9 for (
int i = 0; i < PersonNodes.getLength(); i++
) {
10 Element PersonElement =
(Element) PersonNodes.item(i);
11 Person mPerson =
new Person();
12 mPerson.setId(Integer.parseInt(PersonElement.getAttribute("id"
)));
13 NodeList ChildNodes =
PersonElement.getChildNodes();
14 for (
int j = 0; j < ChildNodes.getLength(); j++
) {
15 if (ChildNodes.item(j).getNodeType() ==
Node.ELEMENT_NODE) {
16 if("name"
.equals(ChildNodes.item(j).getNodeName())){
17 mPerson.setName(ChildNodes.item(j).getFirstChild().getNodeValue());
18 }
else if("sex"
.equals(ChildNodes.item(j).getNodeName())){
19 mPerson.setSex(ChildNodes.item(j).getFirstChild().getNodeValue());
20 }
else if("age"
.equals(ChildNodes.item(j).getNodeName())){
21 mPerson.setAge(Integer.parseInt(ChildNodes.item(j).getFirstChild().getNodeValue()));
22 }
23 }
24 }
25 mPersons.add(mPerson);
26 }
27 return mPersons;
28
29 }
30 }
View Code 測試類如下。里面正對SAX和DOM分別寫了兩個方法:
1 public class TestXml {
2
3 public static void main(String[] args) {
4 SaxParse();
5 DomParse();
6 }
7 public static void DomParse() {
8 DomParseService dps=
new DomParseService();
9 try {
10 List<Person> mPersons=dps.getPersons(
new FileInputStream(
new File("e:/Person.xml"
)));
11 for(Person p:mPersons){
12 System.out.println(p.getName());
13 }
14 }
catch (FileNotFoundException e) {
15 e.printStackTrace();
16 }
catch (ParserConfigurationException e) {
17 e.printStackTrace();
18 }
catch (SAXException e) {
19 e.printStackTrace();
20 }
catch (IOException e) {
21 e.printStackTrace();
22 }
23 }
24 public static void SaxParse() {
25 SaxParseService sps=
new SaxParseService();
26 try {
27 List<Person> Persons=sps.getPersons(
new FileInputStream(
new File("e:/Person.xml"
)));
28 for(Person p:Persons){
29 System.out.println(p.getName());
30 }
31 }
catch (FileNotFoundException e) {
32 e.printStackTrace();
33 }
catch (ParserConfigurationException e) {
34 e.printStackTrace();
35 }
catch (SAXException e) {
36 e.printStackTrace();
37 }
catch (IOException e) {
38 e.printStackTrace();
39 }
40 }
41
42 }
View Code ?
轉載于:https://www.cnblogs.com/hoaprox/p/5259118.html
總結
以上是生活随笔為你收集整理的Java解析XMl文件之SAX和DOm方法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。