Professional Documents
Culture Documents
Ni dung trnh by
XML Parser
Java h tr 2 loi xml parser: Tree Parser - DOM Parser: phn tch ni dung ti liu XML theo m hnh cy phn cp Streaming Parser - SAX Parser ( Simple API for XML ), StAX Parser: pht sinh cc s kin trong qu trnh duyt ti liu Xml
DOM Parser
V d:
<font> <name>Helvetica</name> <size>36</size> </font> Node font c 5 node con: whitespace name whitespace size whitespace
DOM Parser
SAX Parser
Ph hp i vi cc ti liu c kch thc ln v ni dung x l tng i n gin. Pht sinh cc s kin tng ng trong qu trnh c ti liu. Application s to cc event listener lng nghe cc event do parser pht ra truy xut ni dung ti liu. DOM Parser c xy dng bn trn SAX Parser. DOM Parser xy dng cy ti liu DOM tree da trn cc event n nhn c do SAX Parser tr v.
Ni dung trnh by
DOM Parser
import javax.xml.parsers.*; import org.w3c.dom.*; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new File("Sach.xml"));
DOM Parser
// truy cp node gc ca ti liu Element root = doc.getDocumentElement(); // ly v danh sch node con ca mt node NodeList list = root.getChildNodes(); for(int i=0;i<list.getLength();++i) { // x l tng node Node node = list.item(i); }
DOM Parser
// X l cc node con dng Element
NodeList list = root.getChildNodes(); for(int i=0;i<list.getLength();++i) { Node node = list.item(i); if(node instanceof Element) { // x l node name v size Element element = (Element) node; } }
DOM Parser
Rt trch ni dung trong node name v size: Element element = (Element)node; // ang truy cp ti node name v size Text textNode = (Text)element.getFirstChild(); String content = textNode.getData(); if(element.getTagName().equals(name)) name = content; else if(element.getTagName().equals(size)) size = Integer.parseInt(content);
DOM Parser
Cch khc duyt v x l trn danh sch cc node con ca 1 node for(Node childNode = element.getFirstChild(); childNode != null; childNode = childNode.getNextSibling() ) { }
DOM Parser
Ly danh sch attributes ca 1 node:
getAttributes : tr v NamedNodeMap i din cho danh sch cc attribute ca node
NamedNodeMap attributes = element.getAttributes(); for(int i=0;i<attributes.getLength();++i) { Node attributeNode = attributes.item(i); String name = attributeNode.getNodeName(); String value = attributeNode.getNodeValue(); }
DOM Parser
Ly gi tr thuc tnh thng qua tn thuc tnh V d:
<Sach MaSach=1 TenSach=VB.NET />
String maSach = element.getAttribute(MaSach); String tenSach = element.getAttribute(TenSach);
XPath
L cc biu thc ng dn cho php truy cp n cc node trong cy ti liu d dng m khng cn phi duyt v tm kim trn ton b cy ti liu. Khi to i tng XPath: import javax.xml.xpath.*; XPathFactory xpFactory = XPathFactory.newInstance(); XPath path = xpFactory.newXPath();
XPath
XPath
Ly v danh sch cc Node
NodeList list = (NodeList)path.evaluate(/EbookList/Ebook, doc, XPathContants.NODESET);
Ly v 1 node
Node node = (Node)path.evaluate(/EbookList/Ebook[1], doc, XPathContants.NODE);
Ly v kt qu l gi tr ca mt hm
int count = ((Number)path.evaluate("count(/EbookList/Ebook)", doc,XPathConstants.NUMBER)).intValue();
StAX Parser
// M ti liu xml import javax.xml.stream.*; XMLInputFactory factory = XMLInputFactory.newInstance(); XMLStreamReader parser = factory.createXMLStreamReader(new FileReader("DBSach.xml"));
StAX Parser
while(parser.hasNext()) { // c v x l ni dung ti liu XML int event = parser.next(); if(event == XMLStreamConstants.START_ELEMENT) { if(parser.getLocalName().equals("Sach")==true) { sach = new Sach(); } else if(parser.getLocalName().equals("MaSach")==true) { sach.setMaSach(Integer.parseInt(parser.getElementText())); } else if(parser.getLocalName().equals("TenSach")==true) { sach.setTenSach(parser.getElementText()); listSach.add(sach); } } }
StAX Parser
Ly gi tr thuc tnh bn trong Element:
<Sach SoTrang="102" ISBN="104"> String soTrang = parser.getAttributeValue(null, "SoTrang"); String ISBN = parser.getAttributeValue(null,"ISBN");
Ni dung trnh by
Transformer t = TransformerFactory.newInstance().newTransformer() t.setOutputProperty (OutputKeys.INDENT, "yes"); t.setOutputProperty (OutputKeys.METHOD, "xml"); t.setOutputProperty ("{http://xml.apache.org/xslt}indent-amount", "2"); t.transform(new DOMSource(doc), new StreamResult(new FileOutputStream("temp.xml")));
writer.writeStartDocument(); writer. writeStartElement (Sach); writer. writeAttribute (MaSach,123); writer. writeStartElement (TenSach); writer. writeCharacters (harry potter) writer. writeEndElement (); writer. writeStartElement (GiaTien); writer. writeCharacters (123000); writer. writeEndElement (); writer. writeEndElement (); writer. writeEndDocument ();
Ni dung trnh by
<xsl:stylesheet>
<xsl:template match=/> <xsl:apply-templates/> </xsl:template>
</xsl:stylesheet>
Cm n Hi p