java xml stax_Java操作XML(3)--StAX方式处理XML

packagecom.abc.demo.general.xml;importorg.junit.Test;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importjavax.xml.namespace.QName;import javax.xml.stream.*;importjavax.xml.stream.events.Attribute;importjavax.xml.stream.events.XMLEvent;public classStaxCase {private static Logger logger = LoggerFactory.getLogger(StaxCase.class);/*** 基于光标的方式解析xml

*@throwsException*/@Testpublic void parse() throwsException {

XMLInputFactory factory=XMLInputFactory.newInstance();

XMLStreamReader reader= factory.createXMLStreamReader(StaxCase.class.getResourceAsStream("student.xml"));//添加过滤器

XMLStreamReader filterReader = factory.createFilteredReader(reader, newStreamFilter() {

@Overridepublic booleanaccept(XMLStreamReader reader) {//处理开始节点

if(reader.isStartElement()) {return true;

}return false;

}

});while(filterReader.hasNext()) {int type =filterReader.next();if (type ==XMLStreamReader.START_ELEMENT) {if ("student".equals(reader.getName().getLocalPart())) {

logger.info("rollno:" + reader.getAttributeValue("", "rollno"));

}else if ("firstname".equals(reader.getName().getLocalPart())|| "lastname".equals(reader.getName().getLocalPart())|| "nickname".equals(reader.getName().getLocalPart())|| "marks".equals(reader.getName().getLocalPart())) {

logger.info(reader.getName().getLocalPart()+ ":" +reader.getElementText());

}else{continue;

}

}//else if (type == XMLStreamReader.CHARACTERS){//logger.info(reader.getText());//

//} else if (type == XMLStreamReader.END_ELEMENT) {//logger.info("END_ELEMENT:" + reader.getName().getLocalPart() + ">");//}

}

}/*** 基于迭代模型的方式解析xml

*@throwsException*/@Testpublic void parse2() throwsException {

XMLInputFactory factory=XMLInputFactory.newInstance();

XMLEventReader reader= factory.createXMLEventReader(StaxCase.class.getResourceAsStream("student.xml"));//添加过滤器

XMLEventReader filterReader = factory.createFilteredReader(reader, event ->{//处理开始节点

if(event.isStartElement()) {return true;

}return false;

});while(filterReader.hasNext()) {

XMLEvent event=filterReader.nextEvent();if(event.isStartElement()) {if ("student".equals(event.asStartElement().getName().getLocalPart())) {

logger.info("rollno:" + event.asStartElement().getAttributeByName(new QName("", "rollno")).getValue());

Attribute attributeTestattr= event.asStartElement().getAttributeByName(new QName("http://www.w3.org/TR/html4/school/", "testattr"));if (attributeTestattr != null) {

logger.info("testattr:" +attributeTestattr.getValue());

}

}else if ("firstname".equals(event.asStartElement().getName().getLocalPart())|| "lastname".equals(event.asStartElement().getName().getLocalPart())|| "nickname".equals(event.asStartElement().getName().getLocalPart())|| "marks".equals(event.asStartElement().getName().getLocalPart())) {

logger.info(event.asStartElement().getName().getLocalPart()+ ":" +filterReader.getElementText());

}else{continue;

}

}

}

}/*** 生成xml

*@throwsException*/@Testpublic void toXml() throwsException {

XMLOutputFactory factory=XMLOutputFactory.newInstance();

XMLStreamWriter writer=factory.createXMLStreamWriter(System.out);

writer.writeStartDocument("UTF-8", "1.0");

writer.writeStartElement("school", "class", "http://www.w3.org/TR/html4/school/");//第一个学生

writer.writeStartElement("school", "student", "http://www.w3.org/TR/html4/school/");

writer.writeAttribute("rollno", "1");

writer.writeAttribute("school","http://www.w3.org/TR/html4/school/", "testattr", "test");

writer.writeStartElement("school", "firstname", "http://www.w3.org/TR/html4/school/");

writer.writeCharacters("cxx1");

writer.writeEndElement();

writer.writeStartElement("lastname");

writer.writeCharacters("Bob1");

writer.writeEndElement();

writer.writeStartElement("nickname");

writer.writeCharacters("stars1");

writer.writeEndElement();

writer.writeStartElement("marks");

writer.writeCharacters("85");

writer.writeEndElement();

writer.writeEndElement();//第二个学生

writer.writeStartElement("student");

writer.writeAttribute("rollno", "2");

writer.writeStartElement("firstname");

writer.writeCharacters("cxx2");

writer.writeEndElement();

writer.writeStartElement("lastname");

writer.writeCharacters("Bob2");

writer.writeEndElement();

writer.writeStartElement("nickname");

writer.writeCharacters("stars2");

writer.writeEndElement();

writer.writeStartElement("marks");

writer.writeCharacters("85");

writer.writeEndElement();

writer.writeEndElement();//第三个学生

writer.writeStartElement("student");

writer.writeAttribute("rollno", "3");

writer.writeStartElement("firstname");

writer.writeCharacters("cxx3");

writer.writeEndElement();

writer.writeStartElement("lastname");

writer.writeCharacters("Bob3");

writer.writeEndElement();

writer.writeStartElement("nickname");

writer.writeCharacters("stars3");

writer.writeEndElement();

writer.writeStartElement("marks");

writer.writeCharacters("85");

writer.writeEndElement();

writer.writeEndElement();

writer.writeEndElement();

writer.writeEndDocument();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值