1.DOM解析
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class DomParseXML {
DocumentBuilder db;
Document document;
public Document getDocument() throws Exception
{
//创建解析器对象
DocumentBuilder db=DocumentBuilderFactory.newInstance().newDocumentBuilder();
//加载XML文档
Document document=db.parse("src/bookstore.xml");
return document;
}
//1.获得某个具体的节点
public void getSpecificNode(Document document)
{
NodeList nl=((org.w3c.dom.Document) document).getElementsByTagName("售价");
Node node=nl.item(1);
String text=node.getTextContent();
System.out.println("核心技术卷售价是:"+text);
}
//2.遍历所有的元素节点
public void getAllNode(Node node)
{
NodeList nl=node.getChildNodes();
for(int i=0;i<nl.getLength();i++)
{
Node n=nl.item(i);
if(n.getNodeType()==Node.ELEMENT_NODE)
{
System.out.println(n.getNodeName());
getAllNode(n);
}
}
}
//3.修改某个元素节点的主体内容
public void modifyContent(Document document) throws Exception
{
NodeList nl=document.getElementsByTagName("售价");
Node node=nl.item(1);
node.setTextContent("$80");
Transformer tf=TransformerFactory.newInstance().newTransformer();
tf.transform(new DOMSource(document), new StreamResult("src/bookstore.xml"));
}
//4.向指定元素节点中增加子元素节点
public void addSonNode(Document document) throws Exception, Error
{
NodeList nl=document.getElementsByTagName("售价");
Node node=nl.item(0);
Element el=document.createElement("内部价");
el.setTextContent("$50");
node.appendChild(el);
Transformer tf=TransformerFactory.newInstance().newTransformer();
tf.transform(new DOMSource(document), new StreamResult("src/bookstore.xml"));
}
//5.向指定元素节点中增加同级元素节点
public void addNode(Document document) throws TransformerFactoryConfigurationError, TransformerException
{
NodeList nl=document.getElementsByTagName("书");
Node node=nl.item(0);
Element el=document.createElement("批发价");
el.setTextContent("$20");
node.appendChild(el);
Transformer tf=TransformerFactory.newInstance().newTransformer();
tf.transform(new DOMSource(document), new StreamResult("src/bookstore.xml"));
}
//6.删除指定元素节点
public void deleteNode(Document document) throws TransformerFactoryConfigurationError, TransformerException
{
NodeList nl=document.getElementsByTagName("内部价");
Node node=nl.item(0);
node.getParentNode().removeChild(node);
Transformer tf=TransformerFactory.newInstance().newTransformer();
tf.transform(new DOMSource(document), new StreamResult("src/bookstore.xml"));
}
//7.操作XML文件属性
public void operateAttribute(Document document) throws TransformerFactoryConfigurationError, TransformerException
{
NodeList nl=document.getElementsByTagName("书");
Node node=nl.item(0);
((Element)node).setAttribute("languange", "Chinese");
Transformer tf=TransformerFactory.newInstance().newTransformer();
tf.transform(new DOMSource(document), new StreamResult("src/bookstore.xml"));
}
public static void main(String[] args) throws Exception
{
DomParseXML dpx=new DomParseXML();
Document document=dpx.getDocument();
//dpx.getSpecificNode(document);
//dpx.getAllNode(document);
//dpx.modifyContent(document);
//dpx.addSonNode(document);
//dpx.addNode(document);
//dpx.deleteNode(document);
dpx.operateAttribute(document);
}
}
2.SAX解析
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
public class SaxParseXml {
public static void main(String[] args) throws Exception
{
//创建解析器
SAXParser sax=SAXParserFactory.newInstance().newSAXParser();
//获取内容读取器
XMLReader xml=sax.getXMLReader();
//注册一个内容处理器
xml.setContentHandler(new DefaultHandler(){
String curName = "" ; //记录当前是那个标签
int index = 0 ; //记录读取到了那个作者
Book book = null ;
//当解析文档开始时调用
public void startDocument() throws SAXException {
super.startDocument();
System.out.println("文档解析开始了");
}
//当解析文档结束时调用
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("文档解析结束了");
}
//当解析到开始标签时调用
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
super.startElement(uri, localName, qName, attributes);
System.out.println(qName+"标签解析开始了");
if(qName.equals("书")){
book = new Book() ;
}
curName = qName ;
}
//当解析到结束标签时调用
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
System.out.println(qName+"标签解析结束了");
if(qName.equals("书")){
list.add(book) ;
}
curName = null ;
}
//当解析到文本时调用
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
System.out.println(new String(ch,start,length)+"文本");
if("书名".equals(curName))
book.setBookName(new String(ch,start,length)) ;
if("作者".equals(curName))
book.setAuthor(new String(ch,start,length)) ;
if("售价".equals(curName))
book.setPrice(Float.parseFloat(new String(ch,start,length))) ;
}
});
xml.parse("src/bookstore.xml");
}
}