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

import javax.xml.stream.StreamFilter;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;

/**
 * StreamFilter示例程序
 * * 使用过滤器对元素进行过滤
 */
public class StaxStreamFilter implements StreamFilter {

	@Override
	public boolean accept(XMLStreamReader reader) {
		try {
			while (reader.hasNext()) {
				int event = reader.next();
				// 只接受元素的开始
				if (event == XMLStreamConstants.START_ELEMENT) {
					// 只保留user元素
					if ("user".equalsIgnoreCase(reader.getLocalName())) {
						return true;
					}
				}
				if (event == XMLStreamConstants.END_DOCUMENT) {
					return true;
				}
			}
		} catch (XMLStreamException e) {
			e.printStackTrace();
		}
		return false;
	}

	public XMLStreamReader getFilteredReader() {
		String xmlFile = "src/user.xml";
		XMLInputFactory factory = XMLInputFactory.newInstance();
		XMLStreamReader reader;
		try {
			reader = factory.createXMLStreamReader(new FileReader(xmlFile));
			// 创建带有过滤器的读取器实例
			XMLStreamReader freader = factory.createFilteredReader(reader, this);
			return freader;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (XMLStreamException e) {
			e.printStackTrace();
		}
		return null;
	}

	public void listUsers() {
		XMLStreamReader reader = getFilteredReader();
		try {
			// 列出所有用户的名称
			while (reader.hasNext()) {
				// 过滤工作已交由过滤器完成,这里不需要再做
				System.out.println("Name=" + reader.getAttributeValue(null, "name"));
				if (reader.getEventType() != XMLStreamConstants.END_DOCUMENT) {
					reader.next();
				}
			}
			reader.close();
		} catch (XMLStreamException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 测试
	 */
	public static void main(String[] args) {
		StaxStreamFilter t = new StaxStreamFilter();
		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日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友