核心类:
(StreamAPI - CursorAPI)
1: XMLStreamReader - 用于读取xml文件。
获取XMLStreamReader - 用XMLInputFactory
2:XMLStreamWriter-用于写xml文件。
XMLoutoputfactory
1.解析读取users.xml
@Test
public void test1() throws Exception
{
//获取redaer对象用于解析xml文件
XMLInputFactory xif = XMLInputFactory.newInstance();
XMLStreamReader reader = xif.createXMLStreamReader(new FileReader( "./files/users.xml"));
//对于reader来说,与sax解析的方式一样,用int的方式来判断是否有元素的某个标记
int type = reader.next();//读取xml中的第一个节点
while(type!=XMLStreamReader.END_DOCUMENT){//判断不是文件的最后
//可以再次的对type做一个判断
if(type==XMLStreamReader.START_ELEMENT){
//获取元素的名称
String qName = reader.getLocalName();
//判断是否是user节点
if(qName.equals("user")){
//获取属性
String id = reader.getAttributeValue(0);
System.err.println(id);
}else if(qName.equals("name")){
String name = reader.getElementText();//获取当前元素的子元素,子元素=文本元素
System.err.println(name);
}else if(qName.equals("age")){
String age = reader.getElementText();//获取当前元素的子元素,子元素=文本元素
System.err.println(age);
}
}
//必须要向下再移动一次
type=reader.next();
}
}
}
以下代码相同,只是while内的条件不一样,上面的是reader.next() 在最后必须向下移动一次
@Test
public void test2() throws Exception
{
System.err.println("第二种方式");
XMLInputFactory xif = XMLInputFactory.newInstance();
XMLStreamReader reader = xif.createXMLStreamReader(new FileReader("./files/users.xml"));
while(reader.hasNext()){//判断还有下一个元素
int type = reader.next();
if(type==XMLStreamReader.START_ELEMENT){
String qName = reader.getLocalName();
if(qName.equals("user")){
//获取属性
String id = reader.getAttributeValue(0);
System.err.println(id);
}else if(qName.equals("name")){
String name = reader.getElementText();//获取当前元素的子元素,子元素=文本元素
System.err.println(name);
}else if(qName.equals("age")){
String age = reader.getElementText();//获取当前元素的子元素,子元素=文本元素
System.err.println(age);
}
}
}
}
2.封装成List<User>
@Test
public void test2() throws Exception {
List<User> list = new ArrayList<User>();
XMLInputFactory xif = XMLInputFactory.newInstance();
XMLStreamReader reader = xif.createXMLStreamReader(new FileReader( "./files/users.xml"));
User user = null;
while(reader.hasNext()){//判断还有下一个元素
int type = reader.next();
if(type==XMLStreamReader.START_ELEMENT){
String qName = reader.getLocalName();
if(qName.equals("user")){
//获取属性
String id = reader.getAttributeValue(0);
user=new User();
user.setId(id);
}else if(qName.equals("name")){
String name = reader.getElementText();//获取当前元素的子元素,子元素=文本元素
user.setName(name);
}else if(qName.equals("age")){
String age = reader.getElementText();//获取当前元素的子元素,子元素=文本元素
user.setAge(Integer.valueOf(age));
}
}else if(type==XMLStreamReader.END_ELEMENT){
String qName = reader.getLocalName();
if(qName.equals("user")){
list.add(user);
}
}
}
System.err.println("封装的结果为:"+users);
}
3.生成一个新的xml文件-——XMLStreamWriter - 用于生成xml文件
@Test
public void test3() throws Exception {
// 生成一个新的xml文件
XMLOutputFactory out = XMLOutputFactory.newInstance();
XMLStreamWriter writer = out.createXMLStreamWriter(new FileOutputStream("./files/a.xml"));
//写xml的头<?xml v e ?>
writer.writeStartDocument("UTF-8","1.0");
writer.writeStartElement("users");
writer.writeStartElement("user");
writer.writeAttribute("id", "UU001");
writer.writeStartElement("name");
writer.writeCharacters("张三李四");
writer.writeEndElement();
writer.writeStartElement("age");
writer.writeCharacters("99");
writer.writeEndElement();
writer.writeEndElement();
writer.writeEndElement();
writer.writeEndDocument();
}