java中xml(txt/html等格式)解析问题,请教java高手,请勿粘贴其他网页上的内容(能查的都看了)。

[复制链接]
查看11 | 回复3 | 2011-3-23 01:07:50 | 显示全部楼层 |阅读模式
目的:通过对网页内容解析,获得需要的内容,如网页的标题Title,主要内容,描述信息
;而里面的广告、超链接、无关紧要的信息统统不要,从而达到对用户上网行为的分析的目的。
下面是我做的一个:只能对xml文件解析,其他的格式不行。其次这只是对一级子元素判断,未判断二级或三级等。
需要导入jdom jar包

1.放在E盘的app.xml文档
?xml version=\"1.0\" encoding=\"GB2312\"?
Application
Group name=\"book\"
keyloops/key
keylook/key
/Group
Group name=\"book\"
keyloops1/key
keylook1/key
/Group
/Application

java处理程序
package example;

import org.jdom.*;
import org.jdom.input.SAXBuilder;

import java.io.*;
import java.util.*;
/**
* Xml 解析工作实现(读取分析)
* pTitle: /p
* pDescription: /p
* pCopyright: Copyright (c) 2005/p
* pCompany: /p
* @author Yaming
* @version 1.0
*/
public class XmlReader {
private Element m_RootElement = null;
public Element getM_RootElement() {

return m_RootElement;
}
public void setM_RootElement(Element m_RootElement) {

this.m_RootElement = m_RootElement;
}

/**
* 构造函数
* @param xmlFile String
* 根据文件的路径初始化dom的根
*/
public class XmlReader {
private Element m_RootElement = null;
public Element getM_RootElement() {

return m_RootElement;
}
public void setM_RootElement(Element m_RootElement) {

this.m_RootElement = m_RootElement;
}

/**
* 构造函数
* @param xmlFile String
* 根据文件的路径初始化dom的根
*/
public XmlReader(String xmlFile) {

try {

SAXBuilder builder = new SAXBuilder();//解析器定义

Document doc=null;

doc=builder.build(new FileInputStream(xmlFile));//读入Xml文件,获得Doc

this.m_RootElement = doc.getRootElement();//获得Xml文件的最上面的根
//
System.out.println(\"1========\" m_RootElement);

}

catch (IOException ex) {

this.m_RootElement=null;

}

catch (JDOMException ex) {

this.m_RootElement=null;

}
}
/**
* 获得指定名字的根的内容,此方法只适用于此xml
* @param curRoot ElementYour XmlRoot
* @param codeName StringYour XmlCode
* @return List
*/
public List getElement(Element curRoot,String codeName) {
List result = new ArrayList();

if (null == curRoot) {

curRoot = m_RootElement;
}//判断Xml是否存在,以及根是否正确解析
if (null != curRoot) {

List l=curRoot.getChildren();//获得最上层根的所有字节点

Iterator it=l.iterator();//递归取出

while(it.hasNext()){

Element e=(Element)it.next();

if(e.getName().equalsIgnoreCase(codeName)){//获取这些根是否为所需要的

List l1=e.getChildren();//如果需要,解析出这个子节点的所有子节点

Iterator it1=l1.iterator();

while(it1.hasNext()){

Element e1=(Element)it1.next();

result.add(e1.getTextTrim());//取出所包含的值,放到要返回的结果集中

} } }}
return result;
}
回复

使用道具 举报

千问 | 2011-3-23 01:07:50 | 显示全部楼层
<pre id=\"best-answer-content\" class=\"reply-text mb10\">用正则是最灵活可控的方法。用xml解析html无异于缘木求鱼。
如果搜索xml文件,最好别使用dom方式,效率和性能都很差,建议使用xpath方式
回复

使用道具 举报

千问 | 2011-3-23 01:07:50 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-1732781\">public static void main(String[] args) {
                        XmlReader xr = new XmlReader(\"E:\\\\web.xml\");
                        Element e = xr.getM_RootElement();
//                        System.err.println(\"2======\" e);
                        String codeName = \"filter-mapping\";
                        List list = xr.getElement(e, codeName);
                        for(Iterator it = list.iterator();it.hasNext();){
                                System.out.println(\"3==========\" (String)it.next());
//随便的html文档
回复

使用道具 举报

千问 | 2011-3-23 01:07:50 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-1860724\">就如你所说 现在我就解析xml 那能根据我给出的参数查找出我需要的内容吗
例如给出一个标签名、或者标签内的属性 或者是哪个标签之前或之后的内容 灵活的读取
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行