xml java soap.pdf
TRANSCRIPT
-
e -XML/Java/SOAP 2001/03/16 957-2085-11-5 ISBN957-2085-11-5 Growbal
e -XML/Java/SOAP XML ,. Java Write once ,run anywhere ,,. -XML,-Java,., XSL ,SAXDOM Java XML ,XML-RPC , SOAP Web Service, Java Applet ApplicationServlet JSP XML . ,:
XML XML Applet Java Servlet Java Beans SOAP XSLT Java Java Application JSP XML-RPC
1. . XML . XML . Java XML .
1
-
2. XML . XML . . . Namespaces . XPath . . XLink XPointer 3. XML Parsers . . DOM SAX . AELfred XML Parser . Apache Xerces XML Parser . Sun JAXPJava API for XML parsing 4. Java/XML . Java/XML . Client side Java XML . Server side Java XML . XSLT XPath . XML-RPCRemote Procedure Call . SOAPSimple Object Access Protocol 5. . e-CommerceEDIEAI . . . JDBC . B2B2C . B2C . Web Service . B2B . . SOAP service . . .
e
2
-
e
B2B Web 100% 0%
SunMicrosoftIBM XML XML XML XML XML XML Java XML XML Java Java/XML
ibookPress www.ibookpress.com
E-mail [email protected]
3
-
Arthur
From: Arthur Tseng
Sent: Tuesday, August 01, 2000 6:57 PM
Subject:
Dear growbal:
Linuxer Linux Linux Emily
4
-
1 ......................................................................................................................................7
1.1 XML.............................................................................................................................7 1.2 XML ....................................................................................................9 1.3 Java XML..............................................................................................................13 1.4 ................................................................................................................15
2 XML .................................................................................................................18 2.1 XML .................................................................................................18 2.2 ........................................................................................................21 2.3 ............................................................................................................27 2.4 Namespaces................................................................................................................33 2.5 XPath..........................................................................................................................35 2.6 ........................................................................................................................46 2.7 XLink XPointer.....................................................................................................67
3 XML Parsers ..........................................................................................................70 3.1 ............................................................................................................70 3.2 DOM SAX ...........................................................................71 3.3 AELfred XML Parser.................................................................................................75 3.4 Apache Xerces XML Parser.......................................................................................89 3.5 Sun JAXPJava API for XML parsing ..............................................................103
4 Java/XML ................................................................................................................ 115 4.1 Java/XML .............................................................................. 115 4.2 Client side Java XML ........................................................................120 4.3 Server side Java XML ........................................................................151 4.4 XSLT XPath ...............................................................................................189 4.5 XML-RPCRemote Procedure Call...........................................................209 4.6 SOAPSimple Object Access Protocol......................................................232
5 ......................................................................................................266 5.1 e-CommerceEDIEAI ..........................................................266 5.2 ..........................................................................................................268 5.3 ..................................................................................................270 5.4 JDBC .......................................................................................................276 5.5 B2B2C .................................................................................278 5.6 B2C ........................................................................................................279 5.7 Web Service ...........................................................................................318 5.8 B2B ........................................................................................................368 5.9 ..........................................................................................................................386 5.10 SOAP service ..........................................................................................387 5.11 ..........................................................................................................388
5
-
5.12 ..........................................................................................................392 5.13 ..................................................................................................................398
6
-
1
1.1 XML ...
XML XML XML XML Java XML
XML XML
eXtensible Markup LanguageXML1998 2 10 XML World Wide Web ConsortiumW3CRecommendation XML
XML ]> Java XML Growbal 30 500
7
-
Palm Programming Kuo 40 500 XML XML Document Type DefinitionDTD XML XML 2 XML
1.
XML
2.
XML XML
3.
DTD XML SchemaXML XML Schema XML XML
4.
XML
XML SGMLStandard Generalized Markup Language SGML ISOInternational Standard Organization8879:1986 SGML SGML SGML HTMLHypertext Markup Language HTML WWWWorld Wide WebHTMLWWW Internet HTML SGML HTMLtag HTML
8
-
WWW HTML WWW IntranetHTML HTML HTML HTML HTML XMLExtensible Markup Language WWW HTML SGML XMLSGML HTML
1.2 XML XML
Web application XML XML XSL HTMLWML
Electronic Data Interchange
EDIElectronic Data InterchangeValue-Added NetworkVAN X12 EDIFACT
9
-
B2B EDI B2B EDI EDI VANEDI ISA*00* *00* *08*61112502RSR *01*TEST KK000001 *010108*1137*U00102000001768*0*P? GS*PO*6111250211*KK000001 *010108*1137*9788*X*003021 ST*850*397823 BEG*00*RE*4321**010201 REF*AH*M119 REF*DP*651 REF*IA*000100767 DTM*010*010111 N1*BY*91*1288 N1*ST*91*87446 N1*ZZ*991*1288 PO1*1*1*EA*13.34**CB*80221*IZ*365*UP*718379271642 PO1*1*2*EA*13.34**CB*80222*IZ*384*UP*718379271574 PO1*1*3*EA*13.34**CB*80223*IZ*322*UP*718379271498 PO1*1*4*EA*13.34**CB*80224*IZ*361*UP*718379271849 PO1*1*5*EA*13.34**CB*80225*IZ*365*UP*718379271006 CTT*26 SE*36*397823 GE*1*9785 IEA*1*000009562 EDI EDI EDI EDI XML XML EDI XML XML HTTP WWWXML HTTP Internet XML XML XML XML XML EDI
10
-
XML XML 1.0 Document Type DefinitionDTD XML DTD XML DTD XML Schema XML XML XML EDI XML XML EDI XML-EDIhttp://www.xmledi.net EDI EDIXML-EDI EDI XML-EDI XML Internet EDI EDI EDI EDI EDI XML-EDI XML-EDI EDI XML EDI
e-Commerce Business-to-businessB2B Business-to-customerB2C EDI B2B Enterprise Application IntegrationEAI
11
-
Linux Server SQL EAI XMLXML XML COBOL XML XML
Middleware XML XML Electronic Publishing
12
-
XML SGML XMLW3C XML XSLeXtensible Stylesheet LanguageXSL XSLTXSL Transformation FOFormating Object XML XML HTMLWML XML XML XML XML XML meta-language 4 XML-RPCSOAP XML Sun J2EEJava 2 Enterprise Edition.NET XML XML
1.3 Java XML Java XML
Java XML Web applicationECEDIERPEAI Java XML Java XML
Java
Java IA Java WWW Internet Internet WWW Java Applet Java Applet Internet Java Java Java Java Java Java Java API
13
-
1997 Java Servlet Java Servlet Java javax.servletServlet CGI Java Servlet Servlet Servlet Java Visual Machine CGI 1999 6 Sun JSPJava Server Pages Java Servlet Java JSP Java Java Beans Java Servlet
Java XML Java Unicode
Big5GBJava Unicode Java API Java XML XML
XML Java XML Java XML Sun Java XML APIJava API for XML ParsingJAXP XML XML APIJAXP XML XML XSLTXSL Transformation Clark's xtApache XalanApache SOAP for JavaXML-RPCGMD-IPSI XQL Engine XML Java Java XML Java
Javawrite once, run anywhere Java Java Visual MachineJVM Javatier 3-tier Java Windows NT/2000 Server Java Unix/Linux Server Java
14
-
Java API Java XML XML node XML node tree Java XML Java Java API
Java API Java
1.4
XML Java
Fat client
15
-
data tier
Persistence tier URL client tier
middle tier
CGI request CGI Script language PHPCold FusionASPmarkup.
Delivery tierConstruction tier
16
-
Delivery tierConstruction tier
...
XML http://www.w3c.org http://xmlhack.com/ http://www.xml.com XML xml java EC
17
-
2 XML
2.1 XML ...
XML well-formedXML DTDDocument Type DefinitionvalidXML Namespaces XML XML XML XPathXPointer XLink XML Cascading Style SheetsCSSeXtensible
StylesheetFormating ObjectsFO XML XPath XSL Transformation XSLT XML Schema XML
XML XML Java XML XML XML UNIX vijoejedDOS editpe2qeditWindows notepad XML XML XML XML XML
XML Windows notepad
18
-
XML XML XML DTDXML schemastylesheet XML XML XML XML XML XML Internet Merlot Java XML Mer-lo ChannelPoint, Inc. Mer-lotXML.org Merlot DTDvalid XML
Merlot
Merlot
Java 2 Standard Edition Java LinuxWindowsSolarisMac 32MB RAM
http://java.sun.com/j2se/ J2SE JREJava runtime environment classpath http://www.merlotxml.org/ Merlot java -jar Merlot-1.0rc2.jar Morphon XMLEditor Morphon Java XML Version 1.0 beta 8.01 XML CSS XML IBM XML4J DTD
19
-
Morphon XMLEditor
Java 2 Standard Edition Java LinuxWindowsSolarisMac
http://java.sun.com/j2se/ J2SE JREJava runtime environment classpath http://www.morphon.com/ Morphon Unix runXMLEditor1.2.sh Windows runXMLEditor1.2.batJAVA_HOME JDK Microsoft XML notepad XML Windows Microsoft Internet Explorer 4.0 IE 4.0service pack 1 IE XML beta 1.5 XML Processing Instrument DTD DTD XML IE 5 XML Schema XML XML Schema XML
20
-
XML notepad
Microsoft http://www.microsoft.com xpsetup.exe Windows
2.2 eXtensible Markup Language; XML
XML www.w3c.org XML www.w3c.org XML
XML XML .xml XML
XML declaration
XML XML XML
XML
21
-
version="1.0" encoding="Big5" standalone="yes"
XML XML XML version declaration XML 1.0 XML 1.0 XML XML default encoding declaration 26 ASCII 128 Big5 GB EUC-JP Shift-JISinternationalizationi18n UnicodeUTF-8UTF-16 XML XML http://www.w3c.org/international/
UTF-8 Unicode UTF-16 16 32 UnicodeBig5 GB2312 Shift-JIS Windows EUC-JP Unix
XML UTF-8 XML standalone declaration XML DTDDocument Type Definition XML standalone="yes" XML standalone="no" standalone XML XML DTD standalone
22
-
........ Content XML XML XML Element
tag
XML start tagend tag
Java XML
HTML XML DTD
empty-element tag
attribute HTML HTML HTML XML
23
-
XML XML
Java XML Growbal [email protected] 2001-02-01
XML
Java XML Growbal [email protected] 2001-02-01
HTML XML Attribute 1 This is an attribute demo.
24
-
2 fontsizecolor source 1 5 red This is an attribute demo. 2 picture1.tif XML
Entity entity XML
& &' '> >< CDATA CDATA ]]> ]] > > > XML comment XML XML XML HTML XML PIProcessing Instruction TOTORO well-formedXML XML well-formedXML XML
26
-
MACROSS DVD player Porsche 911 Warbirds Palm V well-formedXML XMLDTD
2.3 eXtensible Markup Language; XML
XML www.w3c.org XML www.w3c.org XML XML XML .xml XML
XML declaration
XML XML XML
27
-
XML
version="1.0" encoding="Big5" standalone="yes"
XML XML XML version declaration XML 1.0 XML 1.0 XML XML default encoding declaration 26 ASCII 128 Big5 GB EUC-JP Shift-JISinternationalizationi18n UnicodeUTF-8UTF-16 XML XML http://www.w3c.org/international/
UTF-8 Unicode UTF-16 16 32 UnicodeBig5 GB2312 Shift-JIS Windows EUC-JP Unix
XML UTF-8 XML standalone declaration XML DTDDocument Type Definition XML standalone="yes" XML standalone="no" standalone XML
28
-
XML DTD standalone ........ Content XML XML XML Element
tag
XML start tagend tag
Java XML
HTML XML DTD
empty-element tag
attribute HTML HTML HTML XML
29
-
XML XML
Java XML Growbal [email protected] 2001-02-01
XML
Java XML Growbal [email protected] 2001-02-01
HTML XML Attribute 1
30
-
This is an attribute demo. 2 fontsizecolor source 1 5 red This is an attribute demo. 2 picture1.tif XML
Entity entity XML
& &' '> >< CDATA CDATA ]]> ]] > > > XML comment XML XML XML HTML XML PIProcessing Instruction TOTORO well-formedXML XML well-formedXML XML
32
-
MACROSS DVD player Porsche 911 Warbirds Palm V well-formedXML XMLDTD
2.4 Namespaces Namespaces
XML XML XML XML XML XML XML XML W3C collision W3C Namespaces XML universal
Namespaces
1999-01-14W3C Namespaces Namespaces prefix
33
-
Namespacesprefix bk ISBN prefix isbn Palm 123456789 Namespaces XML Namespaces booktitle Namespaces 'http://www.softchina.com.tw' Namespaces title version Namespaces Palm 123456789 Namespaces cd version Namespaces Palm 123456789 Namespaces prefix Namespaces Palm 123456789
34
-
2.5 XPath XPath
XPath XML XML XSLT XPointer 1999 11 16 XPath W3C RecommendationXPath http://www.w3.org/TR/1999/REC-xpath-19991116
XPath
XPath Document Object ModelDOM XML node XML Parser XML DOM 27093677 130 29850611 233 XML DOM addressbook root noderecord addressbookrecord child nodenamephoneaddress record parent noderecord deleted
XML DOM
35
-
XPath nodes root element text attribute Namespace comment Processing instruction XPath XML XPathXML XPath XPath xpathdemo xlink:href XML 27093677 0933-1234567 130 29850611 233 29850678 277 ...... ...... ...... ......
36
-
record record
phone
record record address
* record record record
deleted true record record normalized-space() deleted
addressbook record
-
record record record record
| name phone address relatives record name
Axis XPath axis XPath child::axis parent:: descendant:: ancestor:: following-sibling:: preceding-sibling:: following:: preceeding:: self:: descendant-or-self:: ancestor-or-self:: attribute:: namespace::namespace
child::axis
child:: //record //record/name//child::record/name//record/child::name
parent::
38
-
record addressbook relatives
descendant::
Namespaces /addressbook/record namephoneaddressrelatives
relatives/namerelatives/phonerelatives/address record /addressbook/record / addressbook/record/relatives/record record ancestor node name /addressbook/record
/addressbook/record/relatives/record name
ancestor::
...... /addressbook/record/relatives/name addressbook recordrelatives addressbookrelatives
following-sibling:: phoneaddressrelatives address
39
-
preceding-sibling:: namephone
name
following::
XML namspace
relativesrelatives/namerelatives/phonerelatives/address
preceeding::
XML namespace
namephone
self:: record
descendant-or-self::
addressrelativesrelatives/namerelatives/phone relatives/address
ancestor-or-self::
40
-
addressbookphonenameaddressrelativesrelatives/name relatives/phonerelatives/address
attribute:: record deleted
namespace::namespace record namespace"http://www.softchina.com.tw/java_xml"
XPath
or and = != = < > mod div + - *
XPath XPath XPath Node setStringBooleanNumber
Node set
last() 41
-
position()
record
record
count()
phone record id()
phone record local-name() namespace-uri()
42
-
name()
record //record 1 rec ame
String
string() string(123)= "123" concat(,,*) concat("abc","def",s) = "abcdef" starts-with(, ) starts-with("abcdef", "ab") = true contains(, ) contains("abcdef", "bc")
43
-
substring-before(, ) substring-before("2000/10/31","/")="2000" substring-after(, ) substring-after("2000/10/31","/")="10/31" substring(,,) substring("abcdefgh", 4, 3)="def" string-length()
address > record name <
normalize-space() normalize-space(" excellent! ")="excellent!"
44
-
translate(,,) translate("this is a book!", "thisabok! ", "Thisabok. ") "This is a book."
Boolean
boolean() boolean(1=1)=true not() not(1=1) = false true() false() lang()
lang("en")=true
Number
number()
45
-
number("123")=123 sum()
1 3 5 sum(nums) = 9
floor() floor(123.456) = 123 ceiling() ceiling(123.456) = 124 round() round(123.456) = 123
2.6
46
-
XML XML HTML XML HTML XML XML HTML HTML 4.x HTML HTML HTML HTML HTML XML informationpresentation XML style sheet HTML HTML PDA W3C Cascading Style SheetsCSS Level 2W3C CSS2 http://www.w3.org/TR/1998/REC-CSS2-19980512 CSS XML eXtensible Stylesheet LanguageXSL HTML XML SGML Document Style and Semantics Specification LanguageDSSSLXSL XML formatting XML transformationcustomization XSL XML
CSSCascading Style SheetsCSS
CSS 1996 HTML XML CSS W3C 1998 5 12 CSS level 2 http://www.w3.org/TR/1998/REC-CSS2-19980512 HTML XML CSS HTML Netscape Navigator Mircosoft Internet Explorer 4.x HTML
47
-
HTML HTML HTML XML CSS CSS CSS HTML Netscape Navigator Microsoft Internet Explorer CSS CSS level 2 CSS2 CSS level 1CSS1CSS2 media-specific CSS2 CSS2 XSL CSS XSL XML
XML + CSS
XML CSS Processing instructionPI PI Palm Growbal Kuo XML CSS book, title, author text { display: block } book {
48
-
background: white; color: black } title { font-size: 1.3em } author { font-style: italic } book, title, author text { margin: 0.5em } CSS XML XML CSS selectorproperty {:} book, title, author text title author book, title, author text XML element property { } selectortitle property title {display:block; font-size:14pt; color:blue; font-style:italic} CSS CSS CSS W3C CSS2 http://www.w3.org/Style/CSS/
49
(property) font-family title {font-family: "", Symbol} title Symbol (property) font-style
normalitalicobliqueinherit Inherit parent element
title {font-style: italic} title
-
(property) font-varient normalsmall-capsinherit title {font-varient: small-caps} (property) font-weight
normalboldbolderlighter 100200300400500600700800900inherit 100 900 normal 400 bold 700
title {font-weight: 800} 800 (property) font-stretch
narrowwidernarrower ultracondensedextra-condensedcondensed semicondensedsemi-expandedexpanded extra-expandedultra-expandedinherit
title {font-stretch: condensed} (property) font-size
xx-smallx-smallsmallmediumlarge x-largexx-large pt(points=1/72 inch)pc (pica=12 pt)cmin(inch) largersmaller em ex x-height px
title {font-size: 14pt} (property) font
50
-
title {font: bold italic 12pt/14pt ""} font-weightfont-stylefont-size/line-heightfont-family
(property) color
redblue blackwhite rgb#rgb#rrggbbrgb(255, 0,0)rgb(100%,0%,0%)
title {color: red} address {color: #f00} phone {color: #ff0000} fax {color: rgb(100%,100%,100%)} mobil {color: rgb(255,0,0)}
title address phone fax mobil (property) background-color transparentinherit color body { background-color: white; color: black } head1 { background-color: transparent; color: black } body head1 (property) background-image noneURI inherit body { background-image: url("/image/picture1.gif"); color: black } paragraph1 {background-image: none} body paragraph1 (property) background-repeat
background-image repeat x y repeat-x x repeat-y y no-repeat
51
-
body { background-image: url("/image/picture1.gif"); background-repeat: repeat; color: black }
Body (property) background-attachment
background-image scrollfixedinherit
body { background-image: url("/image/picture1.gif"); background-attachment: fixed; color: black }
(property) background-position
background-image topcenterbottom leftcenterright 0% 0%100% 100% 2cm 3cm 2cm 3cm font-size
body { background-image: url("/image/picture1.gif"); background-position: center top; color: black }
center top 50% 0% (property) background body { background: url("/image/back1.gif") repeat white center fixed} background-imagebackground-repeatback ground-colorbackground-positionbackground-
attachment
52
-
(property) text-indent
font-size
body { text-indent: 1cm } (property) text-align leftrightcenterjustifyinherit num { text-align: "."}
1.23 12.3 768.12 1. 23 12.3 768.12
(property) text-decoration
noneunderlineoverline line-throughblink
list { text-decoration: underline } (property) text-shadow noneinherit title { text-shadow: 3px 4px 5px gray } 3px 4px 5px gray
font-size
53
-
(property) letter-spacing
normalinherit font-size
title { letter-spacing: 0.1em } 0.1em (property) word-spacing
normalinherit font-size
title {word-spacing: 1em } 1em (property) text-transform capitalizeuppercaselowercasenoneinherit title { text-transform: capitalize } title { text-transform: uppercase }
java xml programming Java Xml Programming JAVA XML PROGRAMMING
(property) white-space
normal pre nowrapinherit
P {white-space: normal} PRE {white-space: pre} HTML CSS
54
-
Box model
CSS box model XML paddingbordermargin
Box model
text { margin: 10px 10px 10px 10px; border: 5px 5px 5px 5px; padding: } margin margin margin font-size auto
(property) margin-top margin text { margin-top: 2em} margin 2em (property) margin-bottom margin (property) margin-left margin (property) margin-right margin
55
-
(property) margin margin
text {margin: 2em } text {margin: 2em 3em} text {margin: 2em 3em 4em}
margin 2em margin 2em margin 3em margin 2em margin 3em margin 4em
Padding margin (property) padding-top padding text {padding-top: 12px} padding 12 (property) padding-left padding (property) padding-bottom padding (property) padding-right padding (property) padding padding margin text { padding: 10px 15px } padding 10 15
Border border margin thinmediumthickinherit
(property) border-top-width border text { border-top-width: 10px }
56
-
text border 10px (property) border-left-width border (property) border-bottom-width border (property) border-right-width border (property) border-width border
border color (property) border-top-color border text { border-top-color: red } border (property) border-left-color border (property) border-bottom-color border (property) border-right-color border (property) border-color border transparentinherit
border (property) border-top-style
57
-
border
border
none
hidden
dotted
dashed
solid
double
groove
ridge
inset border
outset border (property) border-left-style border (property) border-bottom-style border (property) border-right-style border (property) border-style border text { border-style: double } border
58
-
border
(property) border-top border (property) border-left border (property) border-bottom border (property) border-right border (property) border border title { border: thick dashed black } border
HTML XML cell row cells column cells HTML 85 65 James Bond 55 86 Aki 70 75
59
-
HTML CSS table {display: table} caption {display: table-caption} tr {display: table-row} th {display: table-cell} td {display: table-cell} XML 85 65 James Bond 55 86 Aki 70 75 XML CSS final_exam_score { display: table; table-layout:auto } title {display: table-caption; caption-side:top; text-align:central; width:auto} col_title {display: table-row } col {display:table-cell;
60
-
border:double; background:lime; width:20em} student {display: table-row } name {display:table-cell; background: cyan; width:20em} ch {display:table-cell; width:20em } en {display:table-cell; width:20em } final_exam_score { display: table; table-layout:auto } final_exam_score title {display: table-caption; caption-side:top; text-align:central; width:auto} title col_title {display: table-row } col_title col {display:table-cell; border:double; background:lime; width:20em} col_ cell double 20em student namechen cells XSLeXtensible Stylesheet Language XSL XML formattingtransfor-mation XML XSL W3C XSL XSL CSS XSL CSS XSL customizationCSS XSL CGIPHPServletJava Server PagesActive Server Pages
61
-
HTML
XSL XML XSL XML XSL XML
XSL XML
CSS Microsoft Internet Explorer 4.0 Netscape Navigator 4.0 XML CSS
XSL CSS
XML XML HTML XSL XSL TransformationsXSLT XSLT 1999 11 16 W3C Recommendation XSL XML ......
62
-
XML XSL PIProcessing Instruction XPath XSL XPath XML XML XSL XSL XML HTML 1968-09-04 10 27093600 0932-168888 29850666 1955-05-06 20 04-2881777 0912-345678 04-2881778
63
-
HTML 10 (o)27093600
64
-
20 (h)04-2881777 XSLT jclark xtApache Xalan xt http://www.jclark.com/xml/xt.html 19991105 Xalan http://www.apache.org Formatting ObjectsFO FO XSL FO CSS FO CSS FO PDF 56 Formatting object FO CSS Box Formatting property CSS W3C XSL Chapter Text Section Text Section Text Chapter Text Section Text Section Text XML XSL
65
-
66
-
XSL namespaceXSLT xslFO fo FO XML PDF Apache FOP http://xml.apache.org/fop/ XML PDF XEP http://www.renderx.com/ XML PDF FO FO FO XML
2.7 XLink XPointer XLink XPointer
XLink XML XPointer XML HTML XLinkXPointer HTML Anchor tag ...... XLink URLXPointer XML URL
XLink
XLink XML Linking Language Version 1.0 2000 7 3 W3C Candidate RecommendationXLink http://www.w3.org/TR/2000/CR-xlink-20000703/ XLink HTML XML XLink HTML... XML XLink
XLink JavaXML
67
-
XLink " http://www.w3.org/1999/xlink " namespacenamespace prefix xlink XLink
xlink:type xlink:href URL xlink:show xlink:actuate
XPointer XPointer XML Pointer Language Version 1.02000 6 7 W3C Candidate Recommendation http://www.w3.org/TR/2000/CR-xptr-20000607 XPointer Internet text/xml application/xml XPointer XML Path LanguageXPathXPath XML XPointer XML HTML Anchor tagHTML Anchor Part 1 HTML Part 1 XPointer xpointer(id("1234")) 1234 xpointer(descendant::book[position()=3]) xpointer(/child::spec/child::body/child::*/child::book[position()=3]) xpointer(id("1234"))xpointer(id("part1")) /1/11/3 XPointer XPath XML XPointer XPointer ID "1234" XPointer XPointer XPointer XML book book XPointer XML spec body book XPointer ID "1234" ID "part1" XPointer XML XLink + XPointer XPointer XLink XPointer XLink HTML Anchor
68
-
: XLink + XPointer http://www.softchina.com.tw/doc/document1.xml#xpointer(id("part1")) XML XML ' B2C CPU : AMD Athlon 1GHz RAM : 256M DDR Hard Disk : 30G bytes DVD-ROM : 10x 2nd Storage Device : CD-RW 12x Graphic Card : Voodoo 5 Sound Card : Yamaha 724 Monitor : 15 inches TFT XML DTD
69
-
3 XMLParsers
3.1 ...
Java XML XML Java Java Application
XML XML XML SAX DOM XML fred XML Apache Xerces SAX Java XML Sun Java JAXPJava API for XML ParsingProcessing Java
XML
XML XML XML
XML XML Java XML Growbal 50
70
-
PalmOS Programming Kuo 30 XML XML XML XML Java XML Growbal Palm Programming Kuo XML XML XML XML XML XML XML XML XML XML SAX DOM XML XML XML XML parser XML XML XML CJavaPerlPHP Java XML
3.2 DOM SAX DOM SAX
XML XML treeevent driven XML object
TreeDOMDocument Object Model 71
-
a
XML XML element XML XML XML XML
1. root elementroot node 2. element nodebranch node
child node 3. (element node) 4. name "Java XML"text node 5. element node 6. author 50text node
XML a
XML node
DOM
72
-
Object HTML DocumentFrameForm DOMDocument Object Model Javascript DOM Microsoft Netscape DOM DOM XML XML XML XML XML W3C XML DOM API XML XML XML W3C DOM XML HTML W3C XML interface W3C XML XML XML W3CXML W3C SunOracleIBMMicrosoftApache XML DOM XML XML tree of nodes XML XML tree of nodes XML DOM 4 Event drivenSAX Event driven
XML XML event event handler XML
73
-
XML XML Java XML 50 XML events
startDocument StartElement Java XMLcharacters endElement 50 endDocument
callbackevent handler XML event handler SAXSimple API for XML SAXSimple API for XMLXML XML XML-DEV mailing list 1998 5 DOM DOM W3C http://www.megginson.com/SAX SAX XML open tagclose tag#PCDATACDATA event DOM SAX XML object SAX fred parser 23.1KBXML Event Handler SAX SAX event driven XML SAXSAX XML SAX version 2SAX version 2 http://www.megginson.com/SAX SAX 4
74
-
3.3 AELfred XML Parser lfred XML Parser
Opentext 1998 1.2aXML SAX version 1 DOMlfred lfred DOM Java applet 23KB fred XML lfred N lfred XML valid XML well-formed XML
lfred parser
http://www.opentext.com/services/content_management_services/aelfred.zip
aelfred.jar parser CLASSPATH jar Linux shell bash export CLASSPATH=$CLASSPATH://xml/aelfred.jar shell csh set CLASSPATH = ($CLASSPATH //xml/aelfred.jar) Windows 9x autoexec.bat SET CLASSPATH=C:\XML\aelfred.jar;%CLASSPATH% Windows NT Windows 2000 lfred parser lfred native classXmlParsercom.microstar.xml.XmlParser interfaceXmlHandlercom.microstar.xml.XmlHandlerdocument handler XmlException XML HandlerBase XmlHandler SAX SAX version 1 class com.microstar.xml.SAXDriver lfred Java java.lang.Object
75
-
| +---com.microstar.xml.XmlParser XmlParser XML XmlHandler XmlHandler handler = new MyHandler(); XmlParser parser = new XmlParser(); parser.setHandler(handler); parser.parse("http://www.host.com/doc.xml", null); XmlParser XmlHandler XmlParser XML XmlHandler XmlHandler class handler XmlParser parser parser.setHandlerhandler parser handler XML parser.parseXML ......; lfred com.microstar.xml.XmlHandler interfaceimplementclass import com.microstar.xml.XmlHandler; // XmlHandler MyHandler public class MyHandler implements XmlHandler { public void attribute (String attrName, String attrValue, Boolean isSpecified) { // (method) } public void charData(char ch[], int start, int length) { // (method) } public void doctypeDecl (String name, string publicId, String systemId) { // (method) }
76
-
public void endDocument() { // (method) } public void endElement(String name) { // (method) } public void endExternalEntity(String systemId) { // (method) } public void error(String message, String systemId, int line, int column) { // (method) } public void ignorableWhitespace(char[], int, int) { // (method) } public void processingInstruction(String target, String data) { // (method) } public void resolveEntity(String publicId, String systemId) { // (method) } public void startDocument() { // (method) } public void startElement(String name) { // (method) } public void startExternalEntity(String systemId) { // (method) } }
77
-
XmlHandler XmlHandler method XmlHander HandlerBase HandlerBase Java java.lang.Object | +----com.microstar.xml.HandlerBase HandlerBase XmlHandler XmlHandler method HandlerBase XmlHandler method method method method HandlerBase method MyHandler HandlerBase method charData()startElement() endElement() XML import com.microstar.xml.HandlerBase; public class MyHandler extends HandlerBase { // method public void startElement(String name) { // (method) System.out.println("" + name); } public void endElement(String name) { // (method) System.out.println("------------"); } public void charData (char s[], int startPos, int length) { System.out.println(": " + new String (s, startPos, length)); } } lfred com.microstar.xml.XmlException XmlException java.lang.Object | +---java.lang.Throwable | +---java.lang.Exception
78
-
| +---com.microstar.xml.XmlException XmlException
String message String systemIdXML int lineXML int columnXML
XmlHandler error() XmlException HandlerBase error() public void error(String message, String systemId, int line, int column) throws XmlException, Exception Handler error() XmlException try...catch... XmlException import com.microstar.xml.HandlerBase; public class MyHandler extends HandlerBase { public void charData (char s[], int startPos, int length) { System.out.println("Data: " + new String (s, startPos, length)); } // HandlerBase error() public void error (String message, String systemId, int line, int column) throws XmlException, Exception { System.out.println("XML : " + new String (message) ); } } lfred SAX lfred SAX version 1 SAX com.microstar.xml.SAXDriver lfred SAX version 1 methods XML SAXDriver lfred native
79
-
lfred SAX lfred lfred SAX lfred lfred API SAX API SAX version 1 SAX version 2 SAX1 package
org.xml.sax org.xml.sax.helpers
SAX SAX SAX lfred SAX parser lfred import com.microstar.xml.SAXDriver; org.xml.sax.Parser parser = new com.microstar.xml.SAXDriver(); SAX API XML parser.parse(xmluri); import org.xml.sax.Parser; import com.microstar.xml.SAXDriver public class MySAXParser() { pulic void startParse(String xmluri) { try { // SAX org.xml.sax.Parser parser= new com.microstar.xml.SAXDriver(); // XML parser.parse(xmluri); } catch (Exception e) { System.out.println(":"+ e.getMessage()); }
80
-
} } SAX SAX Event HandlerSAX version 1 interface
DTDHandler DocumentHandler EntityHandler ErrorHandler
DocumentHandler import org.xml.sax.DocumentHandler; import org.xml.sax.Attributes; import org.xml.sax.Locator; import org.xml.sax.InputSource; import org.xml.sax.Parser; class MyDocumentHandler implements DocumentHandler { public void characters(char ch[], int start, int length) { // } public void startDocument() { // } public void endDocument() { // } public void startElement(String name, AttributeList atts) { // } public void endElement(String name) { // } public void ignorableWhitespace(char ch[], int start, int length) { // } public void processingInstruction(String target, String data) { // PI
81
-
} public void setDocumentLocator(Locator locator) { // Locator } } ErrorHandler method XML1.0
fetal error XML well-formedness SAX error XML DTD non-validXML SAX
XML warning SAX XML
import org.xml.sax.ErrorHandler; import org.xml.sax.SAXParseException; import java.io.IOException; class MyErrorHandler implements ErrorHandler { public void error(SAXParseException e) throws SAXException { // method } public void fatalError(SAXParseException e) throws SAXException { // method } public void warning(SAXParseException e) throws SAXException { // method } } SAX1 DTD org.xml.sax.DTDHandler method
notationDecl unparsedEntityDecl
method DTD NOTATION ENTITYENTITIES XML DTDHandler
82
-
import org.xml.sax.DTDHandler; import org.xml.sax.SAXParseException; class MyDTDHandler implements DTDHandler { public void notationDecl(String name, String publicId, String systemId) throws SAXException { // mehtod } public abstract void unparsedEntityDecl(String name, String publicId, String systemId, String notationName) throws SAXException { // mehtod } } DocumentHandler method method SAX org.xml.sax.HandlerBase public class HandlerBase extends Object implements EntityResolver, DTDHandler, DocumentHandler, ErrorHandler method SAX MySAXDemo1.java // packages import java.io.FileReader; import java.lang.*; import org.xml.sax.Parser; import org.xml.sax.AttributeList; import org.xml.sax.InputSource; import org.xml.sax.HandlerBase;
83
-
import com.microstar.xml.SAXDriver; // public class MySAXDemo1 extends HandlerBase { private int indentcount = 0; // XML public static void main (String args[]) throws Exception { System.out.println("file=" + args[0]); // SAX org.xml.sax.Parser parser = new com.microstar.xml.SAXDriver(); // MySAXDemo handler = new MySAXDemo(); // parser.setDocumentHandler(handler); parser.setErrorHandler(handler); // XML XML FileReader fr = new FileReader(args[0]); // parser.parse(new InputSource(fr)); } // --------- HandlerBase // method // HandlerBase method ------------- public void startDocument () { System.out.println("XML "); } public void endDocument () { System.out.println("XML "); } public void startElement (String name,
84
- AttributeList attributes) { indentcount ++; String indent = new String(""); for (int i=0; i 0) { String indent = new String(""); for (int i=0; i
-
Kuo 30 Java Application Java Windows 9x/NT/2000 DOS Linux shell java MySAXDemo1 book.xml
SAX import com.microstar.xml.SAXDriver; org.xml.sax.Parser parser = new com.microstar.xml.SAXDriver(); lfred SAXDrive XML lfred Java import org.xml.sax.helpers.*; SAX org.xml.sax.Parser parser = ParserFactory.makeParser(); MySAXDemo2.java // packages import java.io.FileReader; import java.lang.*; import org.xml.sax.Parser; import org.xml.sax.AttributeList; import org.xml.sax.InputSource; import org.xml.sax.HandlerBase; import org.xml.sax.helpers.*; // import com.microstar.xml.SAXDriver;
86
-
// public class MySAXDemo2 extends HandlerBase { private int indentcount = 0; // XML public static void main (String args[]) throws Exception { System.out.println("file=" + args[0]); // SAX //org.xml.sax.Parser parser = // new com.microstar.xml.SAXDriver(); org.xml.sax.Parser parser = ParserFactory.makeParser(); // MySAXDemo2 handler = new MySAXDemo2(); // parser.setDocumentHandler(handler); parser.setErrorHandler(handler); // XML XML FileReader fr = new FileReader(args[0]); // parser.parse(new InputSource(fr)); } // --------- HandlerBase // method
87
- // HandlerBase method ------------- public void startDocument () { System.out.println("XML "); } public void endDocument () { System.out.println("XML "); } public void startElement (String name, AttributeList attributes) { indentcount ++; String indent = new String(""); for (int i=0; i 0) { String indent = new String(""); for (int i=0; i
-
} javac MySAXDemo2.java XML Java system property java -Dorg.xml.sax.parser=com.microstar.xml.SAXDriver MySAXDemo2 book.xml Apache Xerces java -Dorg.xml.sax.parser=org.apache.xerces.parsers.SAXParser MySAXDemo2 book.xml jar classpath set classpath=e:\xml\xerces.jar;%classpath% SAX 4 SAX http://www.megginson.com/SAX/ SAX version 1
3.4 Apache Xerces XML Parser Apache Xerces XML Parser
Apache Software Fundation Java XML parser Xerces-j 1.2.02000 8 XML 1.0 XML schemaW3C API SAX version 2 DOM level 2 SAX version 1 DOM level 1
http://xml.apache.org/dist/xerces-j/ Xerces.jar CLASSPATH Xerces /Xerces.jar set classpath=e:\xml\xerces.jar;%classpath% Xerces parser SAX SAX interface SAX XML class Apache Xerces parser SAX version 2SAX2 package
89
-
org.xml.sax org.xml.sax.helpers
SAX2 org.xml.sax package org.xml.sax.AttributeList SAX1 org.xml.sax.Attributes org.xml.sax.Attributes org.xml.sax.DTDHandler org.xml.sax.ContentHandler org.xml.sax.DocumentHandler SAX1 org.xml.sax.ContentHandler org.xml.sax.EntityResolver org.xml.sax.ErrorHandler org.xml.sax.Locator org.xml.sax.Parser SAX1 org.xml.sax.XMLReader org.xml.sax.XMLFilter org.xml.sax.XMLReader
org.xml.sax.HandlerBase SAX1 org.xml.sax.helpers.DefaultHandler org.xml.sax.InputSource
Exception org.xml.sax.SAXException org.xml.sax.SAXParseException org.xml.sax.SAXNotRecognizedException org.xml.sax.SAXNotSupportedException
SAX2 org.xml.sax.helpers package org.xml.sax.helpers.AttributeListImpl org.xml.sax.helpers.AttributesImpl org.xml.sax.helpers.DefaultHandler org.xml.sax.helpers.LocatorImpl org.xml.sax.helpers.NamespaceSupport org.xml.sax.helpers.ParserAdapter org.xml.sax.helpers.ParserFactory org.xml.sax.helpers.XMLFilterImpl org.xml.sax.helpers.XMLReaderAdapter org.xml.sax.helpers.XMLReaderFactory
90
-
org.xml.sax.XMLReader XML SAX XML org.xml.sax.XMLReader SAX1 org.xml.sax.Parser XML XML SAX Apache Xerces parser SAX version 2 parser org.xml.sax.XMLReader org.apache.xerces.parsers.SAXParser Java packages SAX2 Xerces SAX import org.xml.sax.XMLReader; import org.apache.xerces.parsers.SAXParser; object XMLReader parser = new SAXParser(); XML (xmluri XML URI) parser.parser(xmluri); Xerces SAX public void saxParser(String xmluri) { try { XMLReader parser = new SAXParser(); parser.parser(xmluri); } catch (SAXException e) { System.out.println(":"+ e.getMessage()); } catch (Exception e) { System.out.println(":"+ e.getMessage()); } } lefred parser event drivenXML XML Xerces parser SAX XML Event Handler Event Handler lfred SAX version 1SAX version 2 Event Handler SAX1 SAX1
org.xml.sax.ContentHandler org.xml.sax.ErrorHandler org.xml.sax.DTDHandler org.xml.sax.EntityHandler
DefaultHandler SAX1 HandlerBase XML Event Handler MySAX2Demo.java
91
-
import java.io.FileReader; import org.xml.sax.XMLReader; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import org.apache.xerces.parsers.SAXParser; // public class MySAX2Demo extends DefaultHandler { private int indentcount=0; // XML public static void main (String args[]) throws Exception { // SAX XMLReader xr = new org.apache.xerces.parsers.SAXParser(); // MySAX2Demo handler = new MySAX2Demo(); // xr.setContentHandler(handler); xr.setErrorHandler(handler); // XML XML FileReader fr = new FileReader(args[0]); // xr.parse(new InputSource(fr)); } public MySAX2Demo () { super(); } // --------- DefaultHandler
92
-
// method // DefaultHandler method ------------- public void startDocument () { System.out.println("XML "); } public void endDocument () { System.out.println("XML "); } public void startElement (String uri, String localName, String qName, Attributes attributes) throws SAXException { indentcount ++; String indent = new String(""); for (int i=0; i 0) {
93
- String indent = new String(""); for (int i=0; i
-
import org.xml.sax.XMLReader; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.helpers.XMLReaderFactory; // public class MySAX2Demo2 extends DefaultHandler { private int indentcount=0; // XML public static void main (String args[]) throws Exception { // SAX XMLReader xr = XMLReaderFactory.createXMLReader(); // MySAX2Demo2 handler = new MySAX2Demo2(); // xr.setContentHandler(handler); xr.setErrorHandler(handler); // XML XML FileReader fr = new FileReader(args[0]); // xr.parse(new InputSource(fr)); } public MySAX2Demo2 () { super(); } // --------- DefaultHandler // method // DefaultHandler method ------------- public void startDocument ()
95
- { System.out.println("XML "); } public void endDocument () { System.out.println("XML "); } public void startElement (String uri, String localName, String qName, Attributes attributes) throws SAXException { indentcount ++; String indent = new String(""); for (int i=0; i 0) { String indent = new String(""); for (int i=0; i
-
} } java -Dorg.xml.sax.parser=org.apache.xerces.parsers.SAXParser MySAX2Demo2 book.xml DOM W3C DOM event drivenevent handler XML DOM XML DOM DOM SAX DOM SAX XML SAX XML XML DOM
DOM
Apache Xerces DOM org.apache.xerces.parsers.DOMParser DOM import org.apache.xerces.parsers.DOMParser; import org.w3c.dom.Document; DOMParser parser = new org.apache.xerces.parsers.DOMParser(); XML DOM parser parser.parse(xmluri);
97
-
parser DOM doc Document Document node doc node Document doc = parser.getDocument(); XML DOM DOM DOM Docment nodeXML Docment DOM org.w3c.dom.Node DOM org.w3c.dom.NodeList
NodeNodeList
XML Processing InstructionDTD Node method getNodeType() node.getNodeType();
DOCUMENT_NODE DOCUMENT_FRAGMENT_NODE ELEMENT_NODE TEXT_NODE CDATA_SECTION_NODE COMMENT_NODE PROCESSING_INSTRUCTION_NODE ENTITY_NODE ENTITY_REFERENCE_NODE DOCUMENT_TYPE_NODE NOTATION_NODE ATTRIBUTE_NODE
processNode() public void processNode(Node node) { switch (node.getNodeType()) { case Node.DOCUMENT_NODE:
98
-
// break; case Node.ELEMENT_NODE: // break; case Node.TEXT_NODE: // break; case Node.CDATA_SECTION_NODE: // break; case Node.PROCESSING_INSTRUCTION_NODE: // break; case Node.ENTITY_REFERENCE_NODE: // break; case Node.DOCUMENT_TYPE_NODE: // break; ...... } } import java.lang.*; import java.io.*; import org.apache.xerces.parsers.DOMParser; import org.w3c.dom.*; import org.xml.sax.*; public class MyDOMDemo { private int indentcount=0; public static void main(String[] args) { String xmluri = args[0]; MyDOMDemo myparser = new MyDOMDemo(); myparser.startParse(args[0]);
99
-
} public void startParse(String xmluri) { try { org.apache.xerces.parsers.DOMParser parser = new DOMParser(); parser.parse(xmluri); Document doc = parser.getDocument(); // System.out.println("doc built"); processNode(doc); } catch (IOException e) { System.out.println("IO : "+e.getMessage()); } catch (SAXException e) { System.out.println("SAX : "+e.getMessage()); } catch (Exception e) { System.out.println(": "+e.getMessage()); } } public void processNode(Node node) { switch (node.getNodeType()) { case Node.ELEMENT_NODE: processElementNode(node); break; case Node.TEXT_NODE: processTextNode(node); break; case Node.CDATA_SECTION_NODE: // processCDATANode(node); break; case Node.PROCESSING_INSTRUCTION_NODE: //processPINode(node); break; case Node.ENTITY_REFERENCE_NODE: //processEntityRefNode(node); break; case Node.DOCUMENT_TYPE_NODE: //processDTDNode(node); break;
100
- case Node.COMMENT_NODE: //processCommentNode(node); break; case Node.DOCUMENT_NODE: NodeList nodes = node.getChildNodes(); if (nodes != null) { for (int i=0; i
- } indentcount --; } //processElementNode public void processAttributeNode(Node node) { indentcount ++; Attr attr = (Attr)node; System.out.println( ""+ getIndent(indentcount) + attr.getName()+"="+attr.getValue()); indentcount--; } public void processTextNode(Node node) { String s = node.getNodeValue().trim(); if (s.length()==0) return; indentcount ++; System.out.println(""+ getIndent(indentcount)+ s); indentcount --; } public String getIndent(int indentcount) { String indent = new String(""); for (int i=0; i
-
javac MyDOMDemo.java classpath xerces.jar set classpath=.;c:\jdk1.2.2\lib\tools.jar;e:\xml\xerces.jar XML book2.xml Palm Programming Kuo 30 500 java MyDOMDemo book2.xml
Java write once, run anywhere! import org.apache.xerces.parsers.DOMParser; org.apache.xerces.parsers.DOMParser parser = new DOMParser(); SAX DOM Sun JAXP DOM 4
3.5 Sun JAXPJava API for XML parsing Sun JAXPJava API for XML parsing
Sun Microsystem 1.0.1 XML 1.0 XML namespacesAPI SAX version 1DOM level 1 Pure Java API XML
103
-
JAXP Java extension javax SAX Java Sun project-X Apache Xerces Sun JAXP 1.1 JAXP 1.1 ea2Early Access 2JAXP 1.1 JAXP 1.0 JAXP Java API for XML Processing Parsing Processing JAXP JAXP 1.1 SAX version 2DOM level 2 XSL http://java.sun.com/xml/
Sun JAXP
JDK 1.1.8 PATH JAVA_HOME JDK C:\java C:\> set PATH=C:\java\bin;%PATH% C:\> set JAVA_HOME=C:\java JAXP http://java.sun.com/xml Windows jaxp-1_0_1-win.exeUnix jaxp-1_0_1.zip jaxp1.0.1
licence docs/api/* API javadoc examples/* readme.html install.html relnotes.html Release jaxp.jar Jaxp JAR parser.jar Sun JAR SAX1 DOM1
CLASSPATH jaxp.jar parser.jar Windows C:\jaxp1.0.1\jaxp.jar; C:\jaxp1.0.1\parser.jar UnixLinux /jaxp1.0.1/jaxp.jar:/jaxp1.0.1/parser.jar JAXP
104
-
Sun JAXP Packages: javax.xml.parsers org.w3c.dom org.xml.sax org.xml.sax.helper
SAX JAXP SAX import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.*; import java.io.*; system propertyjavax.xml.parsers.SAXParserFactory com.sun.xml.parser.Parser SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); SAX evnet handler JAXP_SAX_1 HandlerBase method public void startElement (String name, AttributeList attrs) throws SAXException { ...... } public void endElement (String name) throws SAXException { ...... } public void characters (char buf [], int offset, int len) throws SAXException { ...... } ...... DTD factory.setValidating(true); Namespace factory.setNamespaceAware(true); XML xmluri XML URIhandler Event Handler parser.parse(xmluri, handler);
105
- JAXP_SAX_1.java // packages //import java.io.FileReader; import java.io.*; import java.lang.*; import org.xml.sax.Parser; import org.xml.sax.AttributeList; import org.xml.sax.InputSource; import org.xml.sax.HandlerBase; import org.xml.sax.SAXException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; // public class JAXP_SAX_1 extends HandlerBase { private int indentcount = 0; // --------- HandlerBase // method // HandlerBase method ------------- public void startDocument () { System.out.println("XML "); } public void endDocument () { System.out.println("XML "); } public void startElement (String name, AttributeList attributes) { indentcount ++; String indent = new String(""); for (int i=0; i
- System.out.println(":"+indent+ name); } public void endElement (String name) { indentcount --; } public void characters (char ch[], int start, int length) { String s = (new String(ch, start, length)).trim(); if (s.length() > 0) { String indent = new String(""); for (int i=0; i
-
factory.setNamespaceAware(false); // HandlerBase handler = new JAXP_SAX_1(); // XML XML FileReader fr = new FileReader(xmluri); // // parser.parse(new InputSource(fr), handler); } catch (SAXException e) { System.out.println("SAX "+e.getMessage()); } catch (IOException e) { System.out.println("IO "+e.getMessage()); } catch (Exception e) { System.out.println(e.toString()); } } } JAXP SAX version 1 HandlerBase javac JAXP_SAX_1.java classpath XML pc.xml K7-800 Voodoo 3 3000 128M Seagate 15G java JAXP_SAX_1 pc1.xml
108
-
DOM JAXP DOM import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder parser = factory.newDocumentBuilder(); DTD factory.setValidating(true); Namespace factory.setNamespaceAware(true); XML DOM Document doc =parser.parse(xmluri); (JAXP_DOM_1.java) // packages //import java.io.FileReader; import java.io.*; import java.lang.*; import org.xml.sax.InputSource; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.*; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; // public class JAXP_DOM_1 { private int indentcount = 0; public static void main (String args[]) {
109
-
if (args.length==0) { System.out.println(" JAXP_DOM_1 XML "); System.exit(0); } String xmluri = args[0]; String p = System.getProperty("javax.xml.parsers.DocumentBuilderFactory"); System.out.println("file=" + xmluri); System.out.println("property="+p); MyDOMDemo myparser = new MyDOMDemo(); myparser.startParse(args[0]); } public void startParse(String xmluri) { DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance(); factory.setValidating(false); factory.setNamespaceAware(false); try { DocumentBuilder parser = factory.newDocumentBuilder(); // XML XML FileReader fr = new FileReader(xmluri); Document doc = parser.parse(new InputSource(fr)); processNode(doc); // doc.getDocumentElement ().normalize (); //System.out.println ("\n" + // doc.getDocumentElement().getNodeName()); } catch (SAXParseException e) { System.out.println ("XML " + " line " + e.getLineNumber () + "uri " + e.getSystemId ()); System.out.println(" " + e.getMessage ()); } catch (SAXException e) { Exception x = e.getException (); ((x == null) ? e : x).printStackTrace (); } catch (Throwable t) { t.printStackTrace ();
110
- } } public void processNode(Node node) { switch (node.getNodeType()) { case Node.ELEMENT_NODE: processElementNode(node); break; case Node.TEXT_NODE: processTextNode(node); break; case Node.CDATA_SECTION_NODE: // processCDATANode(node); break; case Node.PROCESSING_INSTRUCTION_NODE: //processPINode(node); break; case Node.ENTITY_REFERENCE_NODE: //processEntityRefNode(node); break; case Node.DOCUMENT_TYPE_NODE: //processDTDNode(node); break; case Node.COMMENT_NODE: //processCommentNode(node); break; case Node.DOCUMENT_NODE: NodeList nodes = node.getChildNodes(); if (nodes != null) { for (int i=0; i
- indentcount ++; System.out.println( ""+ getIndent(indentcount) + node.getNodeName()); // NamedNodeMap attributes = node.getAttributes(); for (int i=0; i
- if (s.length()==0) return; indentcount ++; System.out.println(""+ getIndent(indentcount)+ s); indentcount --; } public String getIndent(int indentcount) { String indent = new String(""); for (int i=0; i
-
CPUAMD Athlon 1GHz 256M DDR 30G bytes DVD-ROM10x CD-RW 12x Voodoo 5 Yamaha 724 15 inches TFT
114
-
4 Java/XML
4.1 Java/XML ...
Java Java AppletJava ApplicationJava ServletJava Server Pages
Java XML XML JDOM Java XML XSLT J.Clark XT XML Web Service
XML-RPC SOAP PHP
i18ninternationalization JavaXML Internet duel-byte encoded XT SOAP
Java/XML Java Java Development KitJDK Sun JDK1.3 SolarisLinux Windows Sun Java http://java.sun.com/j2se/ Linux JDK RPM tar.gz RedHat Linux tar.gz Linux JDK1.3.0 Sun 1.3.0_01 http://java.sun.com/j2se/1.3.0_01/index.html Java Sun Java Unicode Java Sun JDK ......
115
-
Sun Java Linux Linux Sun Java Java Development Kits Linux Blackdown JDK JDK1.0.x Java SDK 1.3.x Sun 1.3 Linux JDK Blackdown Blackdown JDK http://www.blackdown.org/java-linux.html Blackdown JDK ftp://ftp1.sinica.edu.tw/pub1/java/linux/blackdown/ XML parser Java Java XML Windows Linux
SAX version 1 version 2
http://www.megginson.com/SAX lfred XML
http://www.opentext.com/services/content_management_services/aelfred.zip Apache Xerces
http://xml.apache.org/dist/xerces-j/ JDOM
http://www.jdom.org JDOM beta 5 jdom-b5.tar.gz jdom-b5.zip JDOM
JAXP
http://java.sun.com/xml
Web Server Java appletJava servlet Java Server Pages Web Server Web Server Apache Apache Web Server http://www.apache.org Apache
Linux Apache Web Server
116
-
Linux Apache RedHat Linuxdatadir/home/httpd/html Apache httpd.confaccess.confsrm.conf RedHat Linux /etc Apache apache_1.3.xx.tar.gz/usr/local Apache tar zxvf apache_1.3.xx.tar.gz cd /usr/local/apche_1.3.xx ./configure --prefix=/usr/local/apache make make install Apache Web Server /usr/local/apache/bin/apachectl start /usr/local/apache/htdocs
Windows Apache Web Server
Windows Apache apache_1_3_12_win32.exe \Apache Group\Apache\htdocs JSDKJava Servlet Development Kit Sun Servlet 1999/04/21 JSDK 2.1 Servlet 2.1 JSWDKJavaServer Pages Web Development Kit Jakarta-Tomcat servlet.jar Servlet JSWDK Jakarta-Tomcat Servlet engine Servlet JSWDKJavaServer Pages Web Development Kit JSP Sun UnixJDK1.1.x Win32JDK1.2
Windows Linuxbash
set JAVA_HOME=c:\jdk1.2.2 export JAVA_HOME =/jdk1.2.2 set CLASSPATH=.;%JAVA_HOME%\ lib/tools.jar
export CLASSPATH=.:$JAVA_HOME/ lib\tools.jar
JSWDK Webserver.jar Servlet Engine
117
-
lib/jspengine.jar JSP Engine lib/servlet.jar Servlets API lib/xml.jar XML
JSWDK JSP ServletsHTML URL http://www.MyBookstore.com/bookshop JSWDK
JSWDK JSWDK /jswdk-1.0.1
/jswdk-1.0.1/bookshop/WEB-INF/servlets
JSWDK Webserver.xml
Servlets
Servlet bookshop/WEB-INF/servletsbookshop/WEB-INF/servlets.properties
bookshop.code=BookshopServlet bookshop.initparams=foo
http://www.MyBookstore.com/bookshop/servlet/BookshopServlet servlet BookshopServlet
bookshop/WEB-INF/mappings.properties
/Bookshop=bookshop
bookshop servlets.properties bookshop.code
http://www.bookstore.com:8080/bookshop/Bookshop bookshop Bookshop
JSP JavaBeans
JSP jsp
118
-
/bookshop/jsp
JavaBeans JSWDK server Classpath JSWDK sever startserver.bat
WEBAPP/WEB-INF/mappings.properties WEBAPP/WEB-INF/servlets.properties Tomcat server
JSP http://localhost:8080/WEBAPP/yourjsp.jsp
Servlet engine and JSP engine Java Servlet JavaServer Pages Web Server Web Server Servlet engine JSP engine Apache Web Server Apache Group Jakarta TomcatServlet JSP engine Web Server Tomcat Tomcat Apache Web Server Microsoft Internet Information Server 4.0 Microsoft Personal Web Server, version 4.0 Netscape Enterprise Serverversion 3.0 http://jakarta.apache.org/ Tomcat Apache Web Server Tomcat Apache Web Server Apache Web Server JDK Tomcat jakarta-tomcat.tar.gz tar zxvf jakarta-tomcat.tar.gz /Jakarta-tomcat
Linux WindowsCLASSPATH .:/jdk1.2.2/lib/tools.jar .;c:\jdk1.2.2\lib\tools.jar JAVA_HOME /jdk1.2.2 c:\jdk1.2.2 TOMCAT_HOME /Jakarta-tomcat c:\Jakarta-tomcat ANT_HOME /Jakarta-tomcat c:\Jakarta-tomcat
Apache Apache mod_jserv.soLinux http://jakarta.apache.org/builds/tomcat/release/v3.1/bin/linux/i386/mod_jserv.so (Win32 ApacheModuleJServ.DLL) Apache RedHat Linux /usr/lib/apache
119
-
Tomcat jakarta-tomcat/conf tomcat-apache.conf LoadModule jserv_module modules/mod_jserv.so Apache Web Server http.confRedHat Linux /etc/httpd/conf Include "/jakarta-tomcat/conf/tomcat-apache.conf" Tomcat server
4.2 Client side Java XML Client side Java XML Java applet XML
Java xBase dBASEClipperFoxPro DOS Novell Netware 14400bps modem Java applet Java applet Java Java applet Java applet Netscape Navigator Microsoft Internet Explorer Java applet
Java applet XML
Java applet XML Joystick.xml Java applet XML hard core XML XML HTML XML HTML Applet XML XML HTML XML lfred Event Handler Joystick.class
120
-
lfred Event Handler MyHandler.class XML Joystick ProductsDemo.class Joystick HTML ProductsDemo.html Applet ProductsDemo2.html jar
Java applet XML lfred 23KB applet XML Java applet Java applet JDK appletviewer Applet XML
lfred validating XML DTD validating XML XML DTD joystick.dtd XML joystick.xml
121
-
Saitek X36 Flight Controller Saitek http://www.saitek.com/ USB Yes 7 3 Yes Yes $99.95 F-16 CombatStick(R) USB CH Products http://www.chproducts.com USB Yes 6 2 Yes No $74.95 SFS Flight Controller USB Suncom Inc. http://www.suncominc.com USB Yes 5 1 No No $95
122
-
Joystick.java Joystick Joystick.java import java.util.*; /** XML XML XML getXXX method */ class Joystick { private String jsname, company, Website, io, button,hat,throttle,rudder, price, picture; /** Constructor */ public Joystick (String jsname, String company, String Website, String io, String button, String hat, String throttle,String rudder, String price, String picture) { this.jsname = jsname; this.company = company; this.Website = Website; this.io = io; this.button = button; this.hat = hat; this.throttle = throttle; this.rudder = rudder; this.price = price; this.picture = picture; //... debug //System.out.println("Joystick.class:"+jsname+","+company //+","+Website+","+io+","+price+","+picture); }
123
-
public String getJsname () { return jsname; } public String getCompany () { return company; } public String getWebsite () { return Website; } public String getIo () { return io; } public String getButton () { return button; } public String getHat () { return hat; } public String getThrottle () { return throttle; } public String getRudder () { return rudder; } public String getPrice () { return price; } public String getPicture () { return picture; } } MyHandler.java MyHandler.java XML import com.microstar.xml.XmlHandler; import com.microstar.xml.XmlParser; import com.microstar.xml.HandlerBase; import java.applet.*; import java.awt.*; import java.util.*; class MyHandler extends HandlerBase { private Choice jschoice; // awt choice private Vector js; // Vector private String currentElementName;// Event handler private String jsname; // XML private String company, Website; private String button, hat, throttle, rudder; private String io, price; private String picture; private String attrname; // private String attrvalue; //
124
-
// Joystick Vector public MyHandler (Choice jschoice) { js = new Vector(); this.jschoice = jschoice; } // js Vector Joystick method public Joystick getJs (int index) { if (index < js.size()) { // ...debug System.out.println("Index:"+ new Integer(index).toString()); return (Joystick) js.elementAt(index); } else { // ...debug //System.out.println("Index > js no."); } // return (Joystick) js.elementAt(index); } // HandlerBase method public void startElement (String name) { // currentElementName = name; // PICTURE picture if (currentElementName.equals ("PICTURE")) { picture = attrvalue; //... debug System.out.println("PICTURE "+attrname+":"+attrvalue); }
125
-
} // tag Joystick // XML Joystick // Joystick js Vector public void endElement (String name) { if (name.equals ("JOYSTICK")) { Joystick j = new Joystick( jsname, company, Website, io, button,hat, throttle,rudder, price, picture); js.addElement(j); //... debug // System.out.println("new JS was built"); } } // public void attribute(String aname, String avalue, boolean isSpecified) { attrname = aname; attrvalue = avalue; } // public void charData (char ch[], int start, int length) { String s = new String (ch, start, length); if (s.trim().length() == 0) return; //.. debug System.out.println("data:"+currentElementName+"("+s+")"); if (currentElementName.equals ("JSNAME")) jsname = s;
126
- else if (currentElementName.equals ("COMPANY")) company = s; else if (currentElementName.equals ("WEBSITE")) Website = s; else if (currentElementName.equals ("IO")) io = s; else if (currentElementName.equals ("BUTTON")) button = s; else if (currentElementName.equals ("HAT")) hat = s; else if (currentElementName.equals ("THROTTLE")) throttle = s; else if (currentElementName.equals ("RUDDER")) rudder = s; else if (currentElementName.equals ("PRICE")) price = s; } // XML Vector Joystick //(jsname) jschoice public void endDocument () { Joystick j; for (int i=0; i
-
import java.util.*; import java.io.*; public class ProductsDemo extends Applet implements ItemListener { private XmlParser parser; // Alfred private MyHandler handler; // // Alfred private java.awt.Choice jschoice; // GUI private Image pic[]; // private MediaTracker tracker; private Hashtable hashtable; private Dimension dim; private Graphics offScreenGraphics; private Image offScreen; private Joystick curJS; // Joystick private String font1; // HTML private int picX; // HTML X private int picY; // HTML Y // Applet public void init () { // choice initGUI(); // XML handler = new MyHandler(jschoice); // Event Handler parser = new XmlParser(); // XML parser.setHandler(handler); // Event Handler XML // HTML HTML // tag // String xmldoc = getParameter ("url"); // XML font1 = getParameter ("font1"); // Applet // Applet picX = new Integer( getParameter ("picX") ).intValue();
128
-
picY = new Integer( getParameter ("picY") ).intValue(); // ... for debug // System.out.println ("URL: "+xmldoc); try { // XML URL xmlURL = new URL (getDocumentBase(), xmldoc); //... debug // System.out.println ("start parse "+xmlURL.toString()); // XML parser.parse(xmlURL.toString(), (String)null, (String) null); //.. debug // System.out.println ("parse ok "+xmlURL.toString()); } catch (Exception e) { e.printStackTrace(); } // initPics(); } /** Init GUI of Applet */ // jschoice private void initGUI () { this.setLayout (null); jschoice = new java.awt.Choice(); jschoice.addItem ("......"); this.add (jschoice); jschoice.addItemListener (this); jschoice.setBounds (10,40,200,30); } /** */ private void initPics () {
129
- String picfile= new String(""); tracker = new MediaTracker (this); hashtable = new Hashtable(); // int itemCount = jschoice.getItemCount(); // pic= new Image[itemCount-1]; for (int i=0; i
-
// ... for debug //System.out.println("jsname:"+curJS.getJsname()); //System.out.println("IO:"+curJS.getIo()); //System.out.println("Com:"+curJS.getCompany()); //System.out.println("Web:"+curJS.getWebsite()); //System.out.println("Pic:"+curJS.getPicture()); //System.out.println("$:"+curJS.getPrice()); // .............. } public void paint (Graphics g) { update (g); } // Applet public void update (Graphics g) { if (dim==null) { dim = this.getSize (); // Java double buffer offScreen = createImage (dim.width, dim.height); offScreenGraphics = offScreen.getGraphics(); } offScreenGraphics.setColor (Color.white); offScreenGraphics.fillRect (0,0,dim.width, dim.height); offScreenGraphics.setColor (Color.black); offScreenGraphics.setFont (new Font (font1, Font.BOLD, 16)); offScreenGraphics.drawString ("", 10,20); offScreenGraphics.setColor (new Color (140,30,72)); offScreenGraphics.setFont (new Font (font1, Font.PLAIN, 14)); // Joystick if (curJS != null) { offScreenGraphics.drawString (": "+ curJS.getCompany(), 10,100); offScreenGraphics.setColor (new Color (50,40,151));
131
-
offScreenGraphics.drawString (": "+ curJS.getWebsite(), 10, 120); offScreenGraphics.drawString (": "+ curJS.getIo(), 10, 140); offScreenGraphics.drawString (": "+ curJS.getPrice(), 10, 160); offScreenGraphics.drawString (": "+ curJS.getButton(), 10,180); offScreenGraphics.drawString (":"+ curJS.getHat(), 10,200); offScreenGraphics.drawString (":"+ curJS.getThrottle(), 10,220); offScreenGraphics.drawString (": "+ curJS.getRudder(), 10,240); Integer picIndex = (Integer) hashtable.get(curJS.getPicture()); // ... for debug //System.out.println("PicIndex="+picIndex.intValue()); offScreenGraphics.drawImage (pic[picIndex.intValue()], picX,picY, this); } // g.drawImage (offScreen, 0,0, null); } } classpath aelfred.jar Applet javac ProductsDemo.java Joystick.java MyHandler.java ProductsDemo.java Joystick.class MyHandler.class ProductsDemo.class
132
-
appletviewer HTML ProdutctsDemo.html Applet HTML JDK appletviewer appletviewer ProductsDemo.html applet appletviewer
System.out.println(......);
133
-
HTML ProductsDemo.html
134
-
Applet Web Server Web Server Apache Web Server Apache Web Server datadirRedHat Linux /home/httpd/html/Win32 .../Apache group/Apache/htdocs/ AppletTest copy ProductsDemo.class MyHandler.class Joystick.class Saitek_X36.gif Suncom_SFSFC_USB.jpg CH_F16CS2000.gif ProductsDemo.html lfred class aelfred.jar WinZip Unzip com/microstar/xml/*.class Web Server doc root AppletTest
135
-
Apache Web Server http://localhost/AppletTest/ProductsDemo.html
class lfred class jar class Alfred com/ProductsDemo.jar jar cvf ProductsDemo.jar com/ ProductsDemo.class Joystick.class MyHandler.class jar Java classXML ProductsDemo.jar AppletTest HTML archive ProductsDemo2.html
136
-
http://localhost/AppletTest/ProductsDemo2.html
Java Application XML Java ApplicationJava Java Java Application Java Visual MachineJVM JDK java jreJava Runtime Environment Java Application Java Application main() method public static void main(String args[]) Java Application Java main() method JavaBeans main() method Java Application JavaBeans XML XML JDOM
JDK XML JDOM Apache Xercesjdom.jarxerces.jar
JDOM 3 SAX DOM SAX DOM Java
137
-
SAX DOM XML JDOM Java XML API Brett McLaughlinJason Hunter James Duncan Davidson JDOM Java API J Java DOM XML DocumentObject model DOM JDOM namespaceDTD Java 2 ListMap JDOM Java XML SAX DOM Java XML SAX XML SAX DOM JDOM http://www.jdom.org JDOM API JDOM org.jdom.input.SAXBuilder SAX org.jdom.input.DOMBuilder DOM JDOM JDOM Document model DOM DOMBuilder SAXBuilder XML Builder builder = new SAXBuilder(saxDriverClass); Document doc = builder.build(xmldoc); Builder build(...) method
File InputStream URL
InputStream XML org.jdom.Element Element element = new Element(element_name); attribute element.addAttribute(attribute_name); // List child_elements = element.getChildren(); // List child_elements = element.getChildren(child_element_name);
138
-
List attributes = element.getAttributes(attribute_name) XML JDOM API XML org.jdom.output.XMLOutputter XMLOutputter() XMLOutputter(String indent) XMLOutputter(String indent, boolean newlines) method output(Document doc, OutputStream out) XML XML XML addressbook.xml DTD XML 27093666
Person.java Addressbook.java XML MyWindowListener.java GUI ABGUI.java
139
-
Persion.java Person.java /**
* */
class Person { private String name, address, telo;
*/ public Person (String name, String address,
this.name = name; this.address = address;
}
this("","",""); }
public String getName () { return name; } public String getAddress () { return address; }
* XML Person
/** Constructor
String telo) {
this.telo = telo;
public Person () {
140
-
public String getTelo () { return telo; } }
Addressbook.java Addressbook.java XML import java.io.*;
import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder;
getXXX() method
import org.jdom.Document;
import org.jdom.output.XMLOutputter; import java.util.*; /** * Addressbook * * */ public class Addressbook { // static public static Addressbook ab = new Addressbook(); // method public static Addressbook getAddressbook() { return ab; } // JDOM XML Xerces SAX parser private static final String DEFAULT_SAX_DRIVER_CLASS = "org.apache.xerces.parsers.SAXParser";
private String saxDriverClass; private SAXBuilder builder;
//JDOM private Document doc;
// Person Hashtable private Hashtable table = new Hashtable(); private String xmldoc = "";
private Element root;
141
-
private Addressbook() { this.saxDriverClass = DEFAULT_SAX_DRIVER_CLASS;
// private
builder = new SAXBuilder(saxDriverClass); } // XML public void startParse(String filename) throws IOException, JDOMException { this.xmldoc = filename; // InputStream FileInputStream fis = new FileInputStream(filename); // InputStream InputStreamReader // Big5 InputStreamReader isr = new InputStreamReader(fis, "Big5"); // InputStreamReader JDOM Document doc = builder.build(isr); // JDOM Document root = doc.getRootElement(); // List List list=root.getChildren(); Element element; Iterator fields; String name=""; String address=""; String telo=""; Person newPerson; // List // // Person if (! list.isEmpty() ) { Iterator records = list.iterator();
142
-
while (records.hasNext()) { element = (Element)records.next(); if (element.getName().equals("person")) { fields = element.getChildren().iterator(); while (fields.hasNext()) { element = (Element)fields.next(); if (element.getName().equals("name")) { name = element.getText(); System.out.println("name="+element.getText()); } else if (element.getName().equals("address")) { address = element.getText(); System.out.println("address="+element.getText()); } else if (element.getName().equals("telo")) { telo = element.getText(); System.out.println("telo="+element.getText()); } } // Person newPerson = new Person( name, address, telo); // Person Hashtable key table.put(name, newPerson); } } } } // xmldoc OutputStream public void close() throws IOException, JDOMException { startOutputXML(new FileOutputStream(xmldoc)); }
143
-
// XML XMLOutputter OutputStream private void startOutputXML(OutputStream out) throws IOException, JDOMException { // Create an outputter with default formatting XMLOutputter outputter = getXMLOutputter(); outputter.output(doc, out); } // XMLOutputter Big5 private XMLOutputter getXMLOutputter() throws IOException, JDOMException { // Create an outputter with certain encoding XMLOutputter outputter = new XMLOutputter(" ", true, "Big5"); outputter.setTrimText(true); outputter.setExpandEmptyElements(true); return outputter; } // public void add(Person p) { // add Person to Hashtable table.put(p.getName(), p); addToXML(p); } // JDOM private void addToXML(Person p) { Element curPerson = new Element("person"); Element curName = new Element("name"); curName.addContent(p.getName()); Element curAddress = new Element("address"); curAddress.addContent(p.getAddress());
144
-
Element curTelo = new Element("telo"); curTelo.addContent(p.getTelo()); curPerson.addContent(curName); curPerson.addContent(curAddress); curPerson.addContent(curTelo); root.addContent(curPerson); } // public Person searchByName(String key) { // search name in XML tree Person p = (Person)table.get(key); return p; } // public void remove(String name) { Person p = (Person)table.get(name); if (p==null) { System.out.println(name+" not found"); return; }; if (table.remove(name) == null) { System.out.println("remove "+name+" error!"); return; } removeFromXML(); } // JDOM private void removeFromXML() { Enumeration persons = table.elements(); Person p; //System.out.println("new root");
145
-
root = new Element("addressbook"); //System.out.println("add elements to root"); while (persons.hasMoreElements() ) { p = (Person)persons.nextElement(); //System.out.println("add one person: "+p.getName()); addToXML(p); } doc.setRootElement(root); } } MyWindowListener.java Java GUI MyWindowListener.java import org.jdom.JDOMException; import java.awt.*; import java.awt.event.*; import java.io.IOException; class MyWindowListener extends WindowAdapter { // Addressbook Addressbook addressbook = Addressbook.getAddressbook(); public void windowClosing(WindowEvent e) { try { // XML addressbook.close(); System.exit(1); } catch (JDOMException ex) { System.out.println("JDOM Exception: "+ex.toString()); } catch (IOException ex) { System.out.println("IO Excption:"+ex.toString()); } } } ABGUI.java ABGUI.java import java.awt.*; import java.awt.event.*;
146
-
import javax.swing.*; import java.net.*; /** * Addressbook * Graphic User Interface * * * */ public class ABGUI extends JFrame { private Person p; private Addressbook addressbook = Addressbook.getAddressbook(); private String xmldoc = "addressbook.xml"; private Font f1 = new Font("", Font.PLAIN, 16); private JButton buttonAdd=new JButton(""); private JButton buttonSearchByName=new JButton(""); private JButton buttonRemove =new JButton(""); private JButton buttonClearFields=new JButton(""); private JTextField fieldName=new JTextField("",40); private JTextField fieldAddress=new JTextField("",40); private JTextField fieldTelo=new JTextField("",40); private JLabel labelName = new JLabel(":"); private JLabel labelAddress = new JLabel(":"); private JLabel labelTelo = new JLabel(":"); private JLabel labelMsg = new JLabel(""); private Container c; public ABGUI() { super(""); // XML try {
147
-
addressbook.startParse(xmldoc); } catch (Exception e) { System.out.println(e.toString()); } // GUI c = getContentPane(); c.setLayout(new BorderLayout()); JPanel pn = new JPanel(); JPanel pc = new JPanel(); buttonAdd.setFont(f1); buttonSearchByName.setFont(f1); buttonRemove.setFont(f1); buttonClearFields.setFont(f1); fieldName.setFont(f1); fieldAddress.setFont(f1); fieldTelo.setFont(f1); labelName.setFont(f1); labelAddress.setFont(f1); labelTelo.setFont(f1); labelMsg.setFont(f1); pn.add(buttonAdd); pn.add(buttonSearchByName); pn.add(buttonRemove); pn.add(buttonClearFields); c.add(pn,BorderLayout.NORTH); pc.add(labelName); pc.add(fieldName); pc.add(labelAddress); pc.add(fieldAddress); pc.add(labelTelo);
148
-
pc.add(fieldTelo); c.add(pc,BorderLayout.CENTER ); c.add(labelMsg,BorderLayout.SOUTH); setSize(400,250); setVisible(true); buttonAdd.addActionListener (new AppListener()); buttonSearchByName.addActionListener (new AppListener()); buttonRemove.addActionListener (new AppListener()); buttonClearFields.addActionListener (new AppListener()); } // GUI event Listener class AppListener implements ActionListener { public void actionPerformed(ActionEvent e) { String name = fieldName.getText(); String address =fieldAddress.getText(); String telo=fieldTelo.getText(); if (e.getSource()==buttonAdd) { p = new Person( name, address, telo ); addressbook.add(p); } else if(e.getSource()==buttonSearchByName) { p = addressbook.searchByName(name);
149
-
if (p!=null) { fieldName.setText(p.getName()); fieldAddress.setText(p.getAddress()); fieldTelo.setText(p.getTelo()); } else { labelMsg.setText("!"); } } else if (e.getSource()==buttonRemove) { addressbook.remove(name); } else if (e.getSource()==buttonClearFields) {