xml java soap.pdf

Upload: cotosilv

Post on 06-Oct-2015

151 views

Category:

Documents


1 download

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) {