📄 countbooks.java
字号:
import javax.swing.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
public class CountBooks {
public static void main(String[] args) {
String filename;
if (args.length > 0) {
filename = args[0];
}
else {
filename = "orders.xml";
}
countBooks(filename);
}
private static void countBooks(String filename) {
DefaultHandler handler = new CountHandler();
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser parser = factory.newSAXParser();
parser.parse(filename, handler);
}
catch (Exception e) {
String errorMessage =
"Error parsing " + filename + ": " + e;
System.err.println(errorMessage);
e.printStackTrace();
}
}
}
class CountHandler extends DefaultHandler {
private boolean collectCount = false;
private boolean collectISBN = false;
private int currentCount = 0;
private int totalCount = 0;
public void startElement(String namespaceUri, String localName,
String qualifiedName, Attributes attributes) throws SAXException {
if (qualifiedName.equals("count")) {
collectCount = true;
currentCount = 0;
}
else if (qualifiedName.equals("isbn")) {
collectISBN = true;
}
}
public void endElement(String namespaceUri, String localName,
String qualifiedName) throws SAXException {
if (qualifiedName.equals("count")) {
collectCount = false;
}
else if (qualifiedName.equals("isbn")) {
collectISBN = false;
}
}
public void endDocument() throws SAXException {
String message =
"You ordered " + totalCount + " copies of \n" +
"Core Web Programming Second Edition.\n";
if (totalCount < 250) {
message = message + "Please order more next time!";
}
else {
message = message + "Thanks for your order.";
}
JOptionPane.showMessageDialog(null, message);
}
public void characters(char[] chars, int startIndex, int length) {
if (collectCount || collectISBN) {
String dataString =
new String(chars, startIndex, length).trim();
if (collectCount) {
try {
currentCount = Integer.parseInt(dataString);
}
catch (NumberFormatException nfe) {
System.err.println("Ignoring malformed count: " +
dataString);
}
}
else if (collectISBN) {
if (dataString.equals("0130897930")) {
totalCount = totalCount + currentCount;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -