天天看點

經典筆試題-XML篇三、XML 部分:(共4 題:基礎1 道,中等難度1 道,較難2 道)

涓???XML ?ㄥ??锛?锛??? 棰?锛??虹?1 ??锛?涓?绛??懼害1 ??锛?杈??? ??锛?

102??XML ??妗e??涔?????绉?褰㈠?锛?瀹?浠?涔??存??浣???璐ㄥ?哄??锛?瑙f??XML ??妗f??????绉??瑰?锛????虹???

绛?锛?

  1. 涓ょ?褰㈠?锛?dtd 浠ュ??schema锛?
  2. ??璐ㄥ?哄??锛?schema ??韬???xml ??锛???浠ヨ?XML 瑙f???ㄨВ??(杩?涔???浠?DTD涓???灞?schema ???規??????)锛?
  3. 瑙f???瑰?锛???DOM,SAX,STAX 绛?锛?

    DOM:澶???澶у????浠舵?跺?舵?ц?戒???????甯稿??瀹熾??杩?涓???棰?????OM ????缁???????????锛?杩?绉?缁??????ㄧ????瀛?杈?澶?锛???涓?DOM 蹇?椤誨?ㄨВ????浠朵??????翠釜??妗h??ュ??瀛?,????瀵?ML ?????鴻?塊??锛?SAX:涓???浜?DOM,SAX ??浜?浠堕┍?ㄥ????XML 瑙f???瑰???瀹?椤哄?璇誨??XML ??浠訛?涓???瑕?涓?娆″?ㄩ?ㄨ?杞芥?翠釜??浠躲??褰????闆????浠跺?澶達???妗g???锛???????绛懼?澶翠???绛劇????訛?瀹?浼?瑙???涓?涓?浜?浠訛??ㄦ?烽??杩??ㄥ?跺??璋?浜?浠朵腑???ュ???浠g???ュ???XML ??浠訛?????瀵?ML ??椤哄?璁塊??锛?

    STAX:Streaming API for XML (StAX)??

103??浣??ㄩ」??涓??ㄥ?頒?xml ????????浜??歸??濡?浣?瀹??扮??? ??涓?绛??懼害??

绛?:?ㄥ?頒??版??瀛?璐?锛?淇℃????缃?涓ゆ?歸?????ㄥ???版??浜ゆ?㈠鈎?版?訛?灏?涓??芥?版??婧????版??缁?瑁???XML ??浠訛??跺??灏?XML ??浠跺??缂╂??????瀵?????杩?缃?缁?浼???缁??ユ?惰??锛??ユ?惰В瀵?涓?瑙e??缂╁??????XML ??浠朵腑杩????稿?充俊??杩?琛?澶??????ㄥ??杞?浠堕??缃??訛??╃??ML ??浠ュ??逛究??杩?琛?锛?杞?浠剁????绉???缃????伴?藉??璐???ML ??浠朵腑??

104????dom 瑙f??xml ??浠舵?跺?浣?瑙e?充腑????棰??濡?浣?瑙f??? ??杈??俱??

绛?锛???濡?涓?浠g??,?ㄧ????瑰???浠ヨВ??

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());
		}
	}
}           

澶???

105??缂?绋???AVA 瑙f??XML ???瑰?????杈??俱??

绛?锛???AX ?瑰?瑙f??XML锛?XML ??浠跺?涓?锛?

<?xml version="1.0" encoding="gb2312"?>
	<person>
	<name>??灏???</name>
	<college>淇℃??瀛???lt;/college>
	<telephone>6258113</telephone>
	<notes>??1955 骞寸??,??澹?锛?95 骞磋??ユ搗??澶у??lt;/notes>
</person>           

澶???

浜?浠跺??璋?绫?AXHandler.java 锛?

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 ??浠?eople.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>" +
		"??甯?淇℃??琛?lt;/CAPTION>");
		out.println("<TR><TD>濮???</TD>" + "<TD>" +
		(String)hashTable.get(new String("name")) +
		"</TD></TR>");
		out.println("<TR><TD>瀛???lt;/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>澶?娉?lt;/TD>" + "<TD>" +
		(String)hashTable.get(new String("notes"))
		+ "</TD></TR>");
		out.println("</TABLE>");
		%>
	</BODY>
</HTML>           

澶???