`
wlqsoft
  • 浏览: 4145 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

浅谈xml解析

 
阅读更多
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);
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics