//Dom4J解析*******************************************************************************
//必须先导入Dom4J包
//创建xml解析器
SAXReader reader = new SAXReader();
//用解析器读取xml文件,存入document对象
Document doc = reader.read(./chenzhou/hello.xml);
//把doc文档写入一个xml文件
FileOutputStream out = new FileOutputStream("e:/contact.xml");
OutputFormat format = OutputFormat.createCompactFormat(); //紧凑格式
format.setEncoding("utf-8");
XMLwriter writer = new XMLwriter(out,format); //如果不设置格式就不用format参数
writer.write(doc);
writer.close();
//创建空白文档
Document doc = DocumentHelper.createDocument();
//获取根标签
Element root = doc.getRootElement();
//获取当前标签Element下所有的node
Iterator it = root.nodeIterator(); //node和element的区别:node可以是任何东西,文本,属性,标签等。
//element表示一个完整的标签,如<tr align = "center">haha</tr> 这个整体就是element
//获取第一个匹配名字的子标签
Element e = root.element("div");
//获取所有匹配名字的子标签
Iterator<Element> it = e.elementIterator("div");
//获取所有子标签
List<Element> list = e.elements();
//创建子标签
Element e = doc.addElement("div");
Element e2 = e.addElement("tr");
//删除标签
e.detach();
//获取匹配名字的属性值
String value = e.attributeValue("align");
//获取匹配名字的属性对象
Attribut att = e.attribute("align");
//获取属性对象的值
String value = att.getValue();
//获取属性对象的名字
String name = att.getName();
//获取所有属性对象
List<Attribute> list = e.attributes();
//获取所有属性对象的迭代器
Iterator<Attribute> it = e.attributeIterator();
//创建标签的属性
Attribute att = e.addAttrbute("name","cz");
//修改属性值
att.setValue("cz9513");
//删除属性
att.detach();
//获取当前Elemment的文本
Stirng text = e.getText();
//获取子标签的文本
String text = e.elementText("div");
//修改文本内容
text.setText("abc");
//XPath技术*******************************************************************************
/*xpath是一门独立的技术,可以用于多出,这里讨论在Dom4J中的应用
1. / 表示根位置 或者 子标签
2. // 表示后代标签,所有后代中满足条件的
3. * 表示所有元素
4. [ ] 表示条件
5. @ 表示选择属性
6. text() 表示选择文本
7. and 表示与条件
*/
//Dom4J中xpath用法
List<Node> list = e.selectNodes("xpath表达式");
Node node = e.selectSingleNode("xpath表达式");
Element e2 = (Element)e.selectSingleNode("xpath表达式");
//xpath实例
String xpath = "";
xpath = "/contactList";
xpath = "/contactList/contact";
xpath = "//contact/name";
xpath = "//name";
xpath = "/contactList/*";
xpath = "/contactList//*";
xpath = "//contact[@id]"; //选择带有id属性的contact标签
xpath = "//contact[2]"; //第二个contact标签
xpath = "//contact[last()]";
xpath = "//@id"; //选择id属性节点对象,返回的是Attribute对象
xpath = "//contact[not(@id)]";//选择不包含id属性的contact标签节点
xpath = "//contact[@id='002']";//选择id属性值为002的contact标签
xpath = "//contact[@id='001' and @name='eric']";//选择id属性值为001,且name属性为eric的contact标签
xpath = "//name/text()";//返回文本内容
xpath = "//contact/name[text()='abc']";//选择姓名为abc的name标签
//SAX解析*******************************************************************************
//创建SAX解析对象
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
//调用parse方法开始解析
File f = new File(./abc.xml);
parser.parse(f,new MyDefaultHandler());
//DefaultHandler对象,parse函数会按顺序控制这个对象内的各个方法循环执行,并顺利读完xml文档
public class MyDefaultHandler extends DefaultHandler {
//文档开始时执行,即读到第一个xml字符
public void startDocument() throws SAXException {}
//读到标签时执行
public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {}
//对标签内部信息处理
public void characters(char[] ch, int start, int length)throws SAXException {}
//读完标签是执行
public void endElement(String uri, String localName, String qName)throws SAXException {}
//读完文档时执行
public void endDocument() throws SAXException {}
}
网友评论