情况是这样的:从别人网站上抓取股票交易信息,结果网站上代码如下
日期 | 开盘价 | 最高价 | 最低价 | 收盘价 | 成交量 | |
---|---|---|---|---|---|---|
2010-04-23 | 18.18 | 18.50 | 17.99 | 18.18 | 4,317,567 | |
2010-04-22 | 18.11 | 18.11 | 18.11 | 18.11 | 0 | |
2010-04-21 | 17.60 | 18.25 | 17.60 | 18.11 | 4,993,918 |
想把日期这种转换成汉字:日期,并且把有关数据提取出来,关键它不符合xml
使用htmlparser 直接转换编码
[quote]把日期这种转换成汉字:日期,并且把有关数据提取出来,关键它不符合xml [/quote]
说它不符合xml,主要原因在于&在xml中严格禁止使用的。
在这里 ,&(“and”符)的实体为“&”,所以在解析这个html时,用String.replace方法将&符号替换成[size=medium]&[/size]。
[code="java"]str.replace("&","&")[/code]
像这种 日期 是HTML中的Latin-1字符实体,日表示ASCII码为26085的字符,像这种实体,只需要把实体开头的&#和结尾的;去掉,然后把中间的数字串转为整型,再转为字符就OK了,见代码:
[code="java"]
package org.zergle.test.w3c.html;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CharEscaper {
/**
* @param args
*/
public static void main(String[] args) {
String s = "日期";
Pattern p = Pattern.compile("\\&#(\\d+);");
Matcher m = p.matcher(s);
int start = 0;
while (m.find(start)) {
start = m.end();
System.out.print((char) Integer.parseInt(m.group(1)));
}
System.out.println();
}
}
[/code]
补充一点:详细的关于xml非法符号及其实体
http://hi.baidu.com/dongkundjy/blog/item/523fd836ae48e9d4a2cc2b43.html
权威文档:http://msdn.microsoft.com/zh-cn/library/ms748250(VS.90).aspx
首先,你想提取你需要的内容出来,存放到XML中。
比如说
日期是我最关心的内容。
日期在浏览器中是可以识别。你设置编码方式成GB2312就行了。
如果你还需要进行日期成中文。上面的johnson.lee已经提供办法。
[code="java"]
public void HexToStr(String str) {
Pattern p = Pattern.compile("\&\#(\d+);");
Matcher m = p.matcher(str);
int start = 0;
while (m.find(start)) {
start = m.end();
System.out.print((char) Integer.parseInt(m.group(1)));
}
}
[/code]
这个比较简单啊。你可以用htmlparser进行解析。这个API专门解析HTML一些标签的。
[quote]谢其实我说不符合xml还有一个重要的就是他的table,里面不符合xml标准,我最主要的是想解析出来股票的信息
关键是把这段里面的日期和金额解析出来。 [/quote]
明白你的意思,如果是这样的html,它并不满足Html代码规范,更不符合xml解析的基本要求。
在这种情况下,只能通过java字符串的操作或者java中正则表达式解析出来。
如果你使用String操作,最好是使用JDK帮助文档,有助于学习。
如果你想使用正则表示解析,参考java中的正则表达式:http://www.sciencenet.cn/blog/user_content.aspx?id=311572