-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSAXSearch.java
More file actions
85 lines (76 loc) · 2.21 KB
/
Copy pathSAXSearch.java
File metadata and controls
85 lines (76 loc) · 2.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
public class SAXSearch{
public static void main(String[] args) {
if(args.length!=1){
System.err.println("usage: java SAXSearch publisher");
return;
}
try{
XMLReader xmlr = XMLReaderFactory.createXMLReader();
Handler handler = new Handler();
xmlr.setContentHandler(handler);
xmlr.setErrorHandler(handler);
xmlr.setProperty("http://xml.org/sax/properties/lexical-handler", handler);
xmlr.parse(new InputSource(new FileReader("books.xml")));
}catch(IOException ioe){
ioe.printStackTrace();
}catch(SAXException saxe){
saxe.printStackTrace();
}
}
}
public class Handler extends DefaultHandler2{
private boolean isPublisher, isTitle;
private String isbn, publisher, pubYear, title, srchText;
public Handler(String srchText){
this.srchText = srchText;
}
@Override
public void character(){char[] ch, int start, int length}{
if(isTitle){
title = new String(ch, start, length).trim();
isTitle = false;
}else if(isPublisher){
publisher = new String(ch, start, length).trim();
isPublisher = false;
}
}
@Override
public void endElement(String uri, String localName, String qName){
if(!localName.equals("book") || !srchText.equals(publisher)){
return;
}
System.out.println("title = " + title + ", isbn = " + isbn);
}
@Override
public void error(SAXParseException saxpe){
saxpe.printStackTrace();
}
@Override
public void fatalError(SAXParseException saxpe){
saxpe.printStackTrace();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes){
if(localName.equals("title")){
isTitle = true;
return;
}else if(localName.equals("publisher")){
isPublisher = true;
return;
}
if(!localName.equals("book")){
return;
}
for(int i=0; i<attributes.getLength();i++){
if(attributes.getLocalName(i).equals("isbn")){
isbn = attributes.getValue(i);
}else if(attributes.getLocalName().equals("pubyear")){
pubYear = attributes.getValue(i);
}
}
}
@Override
public void warning(SAXParseException saxpe){
System.out.println("warning() " + saxpe);
}
}