xml筆試題

    -回復 -瀏覽
    樓主 2020-11-16 16:18:07
    舉報 只看此人 收藏本貼 樓主


    1、XML 文檔定義有幾種形式?它們之間有何本質區別?解析XML 文檔有哪幾種方式??

    答:1)兩種形式:dtd 以及schema;

    2)本質區別:schema 本身是xml 的,可以被XML 解析器解析(這也是從DTD

    上發展schema 的根本目的);

    3)解析方式:有DOM,SAX,STAX 等:

    DOM:處理大型文件時其性能下降的非常厲害。這個問題是由DOM 的樹結構所造成的,這種結構占用的內存較多,而且DOM 必須在解析文件之前把整個文檔裝入內存,適合對XML 的隨機訪問;

    SAX:不同于DOM,SAX 是事件驅動型的XML 解析方式。它順序讀取XML 文件,不需要一次全部裝載整個文件。當遇到像文件開頭,文檔結束,或者標簽開頭與標簽結束時,它會觸發一個事件,用戶通過在其回調事件中寫入處理代碼來處理XML 文件,適合對XML 的順序訪問;

    STAX:Streaming API for XML (StAX)。

    2、你在項目中用到了xml 技術的哪些方面?如何實現的? ?

    答:用到了數據存貯,信息配置兩方面。在做數據交換平臺時,將不能數據源的數據組裝成XML 文件,然后將XML 文件壓縮打包加密后通過網絡傳送給接收者,接收解密與解壓縮后再同XML 文件中還原相關信息進行處理。在做軟件配置時,利用XML 可以很方便的進行,軟件的各種配置參數都存貯在XML 文件中。

    3、用jdom 解析xml 文件時如何解決中文問題?如何解析? ?

    答:看如下代碼,用編碼方式加以解決

    package test;

    import java.io.*;

    public class DOMTest{

    private String inFile = "c:\people.xml";

    private String outFile = "c:\people.xml";

    public static void main(String args[]){

    new DOMTest();

    }

    public DOMTest(){

    try{

    javax.xml.parsers.DocumentBuilder builder =

    javax.xml.parsers.DocumentBuilderFactory.

    newInstance().newDocumentBuilder();

    org.w3c.dom.Document doc = builder.newDocument();

    org.w3c.dom.Element root = doc.createElement("老師");

    org.w3c.dom.Element wang = doc.createElement("王");

    org.w3c.dom.Element liu = doc.createElement("劉");

    wang.appendChild(doc.createTextNode("我是王老師"));

    root.appendChild(wang);

    doc.appendChild(root);

    javax.xml.transform.Transformer transformer =

    javax.xml.transform.TransformerFactory.

    newInstance().newTransformer();

    transformer.setOutputProperty(

    javax.xml.transform.OutputKeys.ENCODING,"gb2312");

    transformer.setOutputProperty(

    javax.xml.transform.OutputKeys.INDENT, "yes");

    transformer.transform(new

    javax.xml.transform.dom.DOMSource(doc),

    new javax.xml.transform.stream.StreamResult(outFile));

    }catch (Exception e){

    System.out.println (e.getMessage());

    }

    }

    }

    4、編程用JAVA 解析XML 的方式。

    答:用SAX 方式解析XML,XML 文件如下:

    <?xml version="1.0" encoding="gb2312"?>

    <person>

    <name>王小明</name>

    <college>信息學院</college>

    <telephone>6258113</telephone>

    <notes>男,1955 年生,博士,95 年調入海南大學</notes>

    </person>

    事件回調類SAXHandler.java :

    import java.io.*;

    import java.util.Hashtable;

    import org.xml.sax.*;

    public class SAXHandler extends HandlerBase{

    private Hashtable table = new Hashtable();

    private String currentElement = null;

    private String currentValue = null;

    public void setTable(Hashtable table){

    this.table = table;

    }

    public Hashtable getTable(){

    return table;

    }

    public void startElement(String tag, AttributeList attrs)

    throws SAXException{

    currentElement = tag;

    }

    public void characters(char[] ch, int start, int length)

    throws SAXException{

    currentValue = new String(ch, start, length);

    }

    public void endElement(String name) throws SAXException{

    if (currentElement.equals(name))

    table.put(currentElement, currentValue);

    }

    }

    JSP 內容顯示源碼,SaxXml.jsp:

    <HTML>

    <HEAD>

    <TITLE>剖析XML 文件people.xml</TITLE>

    </HEAD>

    <BODY>

    <%@ page errorPage="ErrPage.jsp"

    contentType="text/html;charset=GB2312" %>

    <%@ page import="java.io.*" %>

    <%@ page import="java.util.Hashtable" %>

    <%@ page import="org.w3c.dom.*" %>

    <%@ page import="org.xml.sax.*" %>

    <%@ page import="javax.xml.parsers.SAXParserFactory" %>

    <%@ page import="javax.xml.parsers.SAXParser" %>

    <%@ page import="SAXHandler" %>

    <%

    File file = new File("c:\people.xml");

    FileReader reader = new FileReader(file);

    Parser parser;

    SAXParserFactory spf = SAXParserFactory.newInstance();

    SAXParser sp = spf.newSAXParser();

    SAXHandler handler = new SAXHandler();

    sp.parse(new InputSource(reader), handler);

    Hashtable hashTable = handler.getTable();

    out.println("<TABLE BORDER=2><CAPTION>" +

    "教師信息表</CAPTION>");

    out.println("<TR><TD>姓名</TD>" + "<TD>" +

    (String)hashTable.get(new String("name")) +

    "</TD></TR>");

    out.println("<TR><TD>學院</TD>" + "<TD>" +

    (String)hashTable.get(new String("college"))

    +"</TD></TR>");

    out.println("<TR><TD>電話</TD>" + "<TD>" +

    (String)hashTable.get(new String("telephone"))

    + "</TD></TR>");

    out.println("<TR><TD>備注</TD>" + "<TD>" +

    (String)hashTable.get(new String("notes"))

    + "</TD></TR>");

    out.println("</TABLE>");

    %>

    </BODY>

    </HTML>

    ?


    本站代碼下載方法:

    ? ? 關注公眾號,在后臺回復“代碼下載”,如圖:


    我要推薦
    轉發到
    cp彩票