Java面試寶典—XML部分

來源:互聯網
上載者:User

 

1、xml有哪些解析技術?區別是什麼?

答:有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>

 

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

 

a: 兩種形式 dtd  schema,

b: 本質區別:schema本身是xml的,可以被XML解析器解析(這也是從DTD上發展schema的根本目的),c:有DOM,SAX,STAX等

   DOM:處理大型檔案時其效能下降的非常厲害。這個問題是由DOM的樹結構所造成的,這種結構佔用的記憶體較多,而且DOM必須在解析檔案之前把整個文檔裝入記憶體,適合對XML的隨機訪問 SAX:不現於DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML檔案,不需要一次全部裝載整個檔案。當遇到像檔案開頭,文檔結束,或者標籤開頭與標籤結束時,它會觸發一個事件,使用者通過在其回調事件中寫入處理代碼來處理XML檔案,適合對XML的順序訪問 STAX:Streaming API for XML (StAX)    

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.