首页>代码>Java stax解析XML示例>/java-tools/src/StaxStreamDelegate.java
import java.io.FileNotFoundException;
import java.io.FileReader;

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.util.StreamReaderDelegate;

/**
 * 测试StreamReaderDelegate
 */
public class StaxStreamDelegate {

	public XMLStreamReader getDelegateReader() {
		String xmlFile = "src/user.xml";
		XMLInputFactory factory = XMLInputFactory.newInstance();
		XMLStreamReader reader;
		try {
			reader = new StreamReaderDelegate(factory.createXMLStreamReader(new FileReader(xmlFile))) {
				// 重写(Override)next()方法,增加过滤逻辑
				@Override
				public int next() throws XMLStreamException {
					while (true) {
						int event = super.next();
						// 保留用户元素的开始
						if (event == XMLStreamConstants.START_ELEMENT
								&& "user".equalsIgnoreCase(getLocalName())) {
							return event;
						} else if (event == XMLStreamConstants.END_DOCUMENT) {
							return event;
						} else {
							continue;
						}
					}
				}
			};
			return reader;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (XMLStreamException e) {
			e.printStackTrace();
		}
		return null;
	}

	public void listUsers() {
		XMLStreamReader reader = this.getDelegateReader();
		try {
			while (reader.hasNext()) {
				reader.next();
				if (reader.getEventType() != XMLStreamConstants.END_DOCUMENT) {
					// 列出用户的名称和年龄
					System.out.println("Name=" + reader.getAttributeValue(null, "name") 
										+ ";age=" + reader.getAttributeValue(null, "age"));
				}
			}
			reader.close();
		} catch (XMLStreamException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		StaxStreamDelegate t = new StaxStreamDelegate();
		t.listUsers();
	}
}
最近下载更多
0312wangchen  LV26 2019年10月31日
何林祥  LV1 2018年2月5日
skyxiaoke  LV3 2017年7月2日
758039538  LV2 2013年11月21日
最近浏览更多
1443251642  LV1 2022年12月19日
PaymentCodeSystem  LV11 2022年8月4日
likaiyu 2021年7月31日
暂无贡献等级
329512801  LV28 2021年7月8日
张洪  LV1 2021年7月1日
迷瞪的一批  LV6 2021年3月2日
我是你唯一的执着  LV4 2020年6月16日
raccoonxx  LV2 2020年6月4日
0312wangchen  LV26 2019年10月31日
hubugai1  LV11 2018年8月28日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友