@Test
public void saxXml()
{
long startTime = System.currentTimeMillis();
try
{
// step 1: 获得SAX解析器工厂实例
SAXParserFactory factory = SAXParserFactory.newInstance();
// step 2: 获得SAX解析器实例
SAXParser parser = factory.newSAXParser();
// step 3: 开始进行解析
// 传入待解析的文档的处理器
parser.parse(new File("E:\\a\\2018111412301.xml"), new MyHandler());
}
catch (Exception e)
{
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.println("运行时间:" + (endTime - startTime) + "ms");
}
class MyHandler extends DefaultHandler
{
private int count = 0;
private String value;
/**
* @param uri xml文档的命名空间
* @param localName 标签的名字
* @param qName 带命名空间的标签的名字
* @param attributes 标签的属性集
* @Description:标签(节点)解析开始时调用
* @Date: 2018/12/13 13:08
* @Method startElement
* @Return void
*/
@Override
public void startElement(String uri,
String localName, String qName, Attributes attributes)
{
//遍历整个xml文件
System.out.println("<" + qName);
int len = attributes.getLength();
for (int i = 0; i < len; i++)
{
System.out.println(attributes.getQName(i) + "=" + attributes.getValue(i));//得到节点的属性信息
}
System.out.println(">");
/* 得到当前节点下的value值
if ("cimNARI:SubControlArea.recordApp".equals(qName))
{
System.out.println("<" + qName);
int len = attributes.getLength();
for (int i = 0; i < len; i++)
{
System.out.println(attributes.getQName(i) + "=" + attributes.getValue(i));//得到节点的属性信息
}
System.out.println(">");
}*/
//得到当前节点的属性信息 节点信息:<cim:Substation rdf:ID="210000138">
/*
System.out.println("<" + qName);
//当前节点 :cim:Substation
if ("cim:Substation".equals(qName))
{
System.out.println("<" + qName);
int len = attributes.getLength();
for (int i = 0; i < len; i++)
{
//当前节点属性的值:210000138
if ("210000138".equals(attributes.getValue(i)))
{
name = qName;
System.out.println(attributes.getQName(i) + "=" + attributes.getValue(i));//得到节点的属性信息
}
}
System.out.println(">");
}*/
}
/**
* @param ch 当前读取到的TextNode(文本节点)的字节数组
* @param start 字节开始的位置,为0则读取全部
* @param length 当前TextNode的长度
* @Author:SunHongchen
* @Description:解析标签的内容的时候调用
* @Date: 2018/12/13 13:10
* @Method characters
* @Return void
*/
@Override
public void characters(char ch[], int start, int length)
{
String str = new String(ch, start, length);// 将当前TextNode转换为String
if (!"\n".equals(str))
{
//value = str;
System.out.print(str);//"当前节点中的值===>" +
}
}
@Override
public void endElement(String uri,
String localName, String qName)
{
//得到当前节点下的value值
/*
if ("cimNARI:SubControlArea.recordApp".equals(qName))
{
System.out.println(value);
count++;
System.out.println(count);
}*/
//遍历整个xml文件
System.out.println("</" + qName + ">");
}
}
SAX解析XML文件-遍历
猜你喜欢
转载自blog.csdn.net/qq_28773851/article/details/85002854
今日推荐
周排行