浅谈xml解析
来源:互联网 发布:js div滑动效果 编辑:程序博客网 时间:2024/06/06 03:59
java中的xml解析,我们可以用dom解析,dom解析,dom解析把整个xml文档按照树形的缩进结构来解析的,一般,使用dom解析的时候,我们需要拿到dom解析器,并且拿到xm树的根节点,然后,在其中找到我们所需要的信息,当然,java中domApi给我们提供了非常方便的获取一些信息的接口:
dom解析流程,总结一下:
1,拿到dom解析器
->要用的接口是documentBuilder,documentBuilderFactory,Document;
2,获取dom根节点
->要用的接口是document.getDocumentElement();
3,获取我们需要的信息
->getElementByTagName();获取的是我们所需要的根节点下的所有信息
->getAttributes(),获取节点中的所有属性,他的返回值是NamedNodeMap,这时候,我们可以直接拿到相应的属性的值了,注意,dom的属性也是Node节点,通过getNodeValue()获取值;
-------------------------------------------------------dom获取信息,示例---------------------------------------------------------
=======获取dom
public Document getDocument(InputStream in)
{
Document dom = null;
try
{
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
dom = builder.parse(in);
return dom;
} catch (Exception exp)
{
exp.printStackTrace();
} finally
{
// 必要的时候要用
}
return null;
}
========获取rootNode
public Element getRootNode(Document dom)
{
if (null == dom)
{
return null;
}
Element root = dom.getDocumentElement();
return root;
}
==========获取xml中的所有节点信息
private void xmlToString(Node node)
{
if (Node.ELEMENT_NODE == node.getNodeType())
{
NodeList list = node.getChildNodes();
int depth = list.getLength();
Node firstNode = list.item(0);
if (depth == 1 && firstNode.getNodeType() == Node.TEXT_NODE)
{
buffer.append(firstNode.getNodeValue());
buffer.append("\n");
}
else
{
buffer.append(node.getNodeName());
buffer.append("\n");
NamedNodeMap map = node.getAttributes();
if ("student".equals(node.getNodeName()))
{
buffer.append(map.getNamedItem("name").getNodeValue());
buffer.append("....");
buffer.append(map.getNamedItem("sex").getNodeValue());
buffer.append("....");
buffer.append(map.getNamedItem("age").getNodeValue());
buffer.append("....");
buffer.append("\n");
}
for (int i = 0; i < depth; i++)
{
xmlToString(list.item(i));
}
}
}
}
-----------------------------------Android平台pull解析-------------------------
andorid平台,我们解析xml可以用pull解析,pull解析采用的事件驱动解析,也就是,整个文档有start和end之分,每一个标记也有start之分,碰到一个标记的时候,我们只需要处理我们需要的数据,其他数据不用关心,示例如下:
public String pullParser(InputStream in)
{
try
{
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parsre = factory.newPullParser();
parsre.setInput(in, "utf-8");
int eventType = parsre.getEventType();
while(XmlPullParser.END_DOCUMENT != eventType)
{
switch(eventType)
{
case XmlPullParser.START_DOCUMENT:
{
//解析文档之前,需要的一些准备工作在这里做
break;
}
case XmlPullParser.START_TAG:
{
//获取我们关心的节点数据
if("ban".equals(parsre.getName()))
{
buffer.append("node..name..ban:"+parsre.getAttributeValue(0));
buffer.append("\n");
}
if("name".equals(parsre.getName()))
{
buffer.append("node..name..name:"+parsre.nextText());
buffer.append("\n");
}
break;
}
case XmlPullParser.END_TAG:
{
//处理一些要获取的数据节点的收尾工作
break;
}
}
eventType = parsre.next();
}
}
catch(Exception exp)
{
exp.printStackTrace();
}
return new String(buffer);
}
dom解析流程,总结一下:
1,拿到dom解析器
->要用的接口是documentBuilder,documentBuilderFactory,Document;
2,获取dom根节点
->要用的接口是document.getDocumentElement();
3,获取我们需要的信息
->getElementByTagName();获取的是我们所需要的根节点下的所有信息
->getAttributes(),获取节点中的所有属性,他的返回值是NamedNodeMap,这时候,我们可以直接拿到相应的属性的值了,注意,dom的属性也是Node节点,通过getNodeValue()获取值;
-------------------------------------------------------dom获取信息,示例---------------------------------------------------------
=======获取dom
public Document getDocument(InputStream in)
{
Document dom = null;
try
{
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
dom = builder.parse(in);
return dom;
} catch (Exception exp)
{
exp.printStackTrace();
} finally
{
// 必要的时候要用
}
return null;
}
========获取rootNode
public Element getRootNode(Document dom)
{
if (null == dom)
{
return null;
}
Element root = dom.getDocumentElement();
return root;
}
==========获取xml中的所有节点信息
private void xmlToString(Node node)
{
if (Node.ELEMENT_NODE == node.getNodeType())
{
NodeList list = node.getChildNodes();
int depth = list.getLength();
Node firstNode = list.item(0);
if (depth == 1 && firstNode.getNodeType() == Node.TEXT_NODE)
{
buffer.append(firstNode.getNodeValue());
buffer.append("\n");
}
else
{
buffer.append(node.getNodeName());
buffer.append("\n");
NamedNodeMap map = node.getAttributes();
if ("student".equals(node.getNodeName()))
{
buffer.append(map.getNamedItem("name").getNodeValue());
buffer.append("....");
buffer.append(map.getNamedItem("sex").getNodeValue());
buffer.append("....");
buffer.append(map.getNamedItem("age").getNodeValue());
buffer.append("....");
buffer.append("\n");
}
for (int i = 0; i < depth; i++)
{
xmlToString(list.item(i));
}
}
}
}
-----------------------------------Android平台pull解析-------------------------
andorid平台,我们解析xml可以用pull解析,pull解析采用的事件驱动解析,也就是,整个文档有start和end之分,每一个标记也有start之分,碰到一个标记的时候,我们只需要处理我们需要的数据,其他数据不用关心,示例如下:
public String pullParser(InputStream in)
{
try
{
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parsre = factory.newPullParser();
parsre.setInput(in, "utf-8");
int eventType = parsre.getEventType();
while(XmlPullParser.END_DOCUMENT != eventType)
{
switch(eventType)
{
case XmlPullParser.START_DOCUMENT:
{
//解析文档之前,需要的一些准备工作在这里做
break;
}
case XmlPullParser.START_TAG:
{
//获取我们关心的节点数据
if("ban".equals(parsre.getName()))
{
buffer.append("node..name..ban:"+parsre.getAttributeValue(0));
buffer.append("\n");
}
if("name".equals(parsre.getName()))
{
buffer.append("node..name..name:"+parsre.nextText());
buffer.append("\n");
}
break;
}
case XmlPullParser.END_TAG:
{
//处理一些要获取的数据节点的收尾工作
break;
}
}
eventType = parsre.next();
}
}
catch(Exception exp)
{
exp.printStackTrace();
}
return new String(buffer);
}
- XML解析技术浅谈
- 浅谈xml解析
- 浅谈XML解析
- 浅谈使用c#解析xml
- Digester解析XML文件浅谈
- java xml解析实例浅谈
- 浅谈XML 解析技术性能对比分析之 解析XML
- 浅谈利用Xerces C++解析XML文档
- 浅谈如何使用tinyxml解析xml文件
- 浅谈XMl解析的几种方式
- Web_PHP_PHP XML Expat 解析器浅谈;
- Web_PHP_PHP XML DOM解析器浅谈;
- 浅谈JAVA解析XML的方法
- 浅谈XML 解析技术性能对比分析之 生成XML
- 浅谈XML 解析技术(一)SAX解析
- 浅谈XML 解析技术(三) JDOM解析
- 浅谈XML 解析技术(四) Dom4j解析
- 浅谈XML 解析技术(五) Jaxb解析
- Android 开发指南 翻译6 Accessing Resources
- 支持在Ubuntu 8.10、Ubuntu 9.04系统上自动安装微软雅黑、monaco-linux、lu...
- for语句–shell
- hibernate出现Exception in thread "main " java.lang.ExceptionInInitializerError错误解决办法
- Fedora16安装和自启动Mysql
- 浅谈xml解析
- Ni3DRenderView
- php中global与$GLOBAL的用法及区别
- 设计模式--设计模式总览表
- Blackberry强制横竖屏
- 实用英文10000单词
- Android 4.0 +MyEclipse 9 整合开发环境搭建
- 想去锻炼
- application manager