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

目的:通过对网页内容解析,获得需要的内容,如网页的标题Title,主要内容,描述信息
;而里面的广告、超链接、无关紧要的信息统统不要,从而达到对用户上网行为的分析的目的。
下面是我做的一个:只能对xml文件解析,其他的格式不行。其次这只是对一级子元素判断,未判断二级或三级等。
需要导入jdom jar包

1.放在E盘的app.xml文档
<?xml version="1.0" encoding="GB2312"?>
<Application>
<Group name="book">
<key>loops</key>
<key>look</key>
</Group>
<Group name="book">
<key>loops1</key>
<key>look1</key>
</Group>
</Application>

java处理程序
package example;

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

import java.io.*;
import java.util.*;
/**
* Xml 解析工作实现(读取分析)
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </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 Element Your XmlRoot
* @param codeName String Your 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;
}

用正则是最灵活可控的方法。用xml解析html无异于缘木求鱼。
如果搜索xml文件,最好别使用dom方式,效率和性能都很差,建议使用xpath方式
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-15
请把你要解析的HTML文档贴个出来,看看追问

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文档

第2个回答  2011-03-15
很多html都不规范你怎么解析啊,要解析只能解析xhtml,这个严格的xml文档。追问

就如你所说 现在我就解析xml 那能根据我给出的参数查找出我需要的内容吗
例如给出一个标签名、或者标签内的属性 或者是哪个标签之前或之后的内容 灵活的读取

第3个回答  2011-03-16
顶楼上,html用dom解析就是个杯具。

老老实实用正则表达式是王道
相似回答
大家正在搜