最近由于工作上的需要,我要分析网页中的html标记元素,对其中的文本进行操作。虽然有这样的组件,但是我还是选择了自己写代码,来尝试一下。最开始还好,后面发现这条路越走越难。
第一个问题是我该如何分析出一个元素的开始。例如<font size="4" >;开始我想用正则表达式,后来发现这个表达式并不简单。这样的表达式如:<font.*>;这是一个失败的表达式,它会匹配出<font开始,直到最后一个>之间的所有数据。当我走到这里时,我发现一切都没有我们所想象的那么简单。
----------------------------------------------------------10.11
今天在路上突然想到一个解决方法:逐个地读取字符,然后用一个变量讲读到的字符收集起来,再用正则表达式来分析,直到分析到有效的标记元素为止。
代码为:
string ParseString = "....<font size="4">...";
private void ParseFlag(string ParseString)
{
string cache;
StringReader sr = new StringReader(ParseString);
int code = sr.Read();
int index= 0;
while(code >=0)
{
cache += Convert.ToChar(code);
Match matchObj = RegEx.Match(cache, "<font.*>");//用正则表达式<font.*>来匹配查找
if(!string.IsNullOrEmpty(matchObj.Value))
{
ParseFlag(ParseString.SubString(index);//递归调用
break;
}
index ++;
}
}
以上的代码不完整,至少我现在觉得它的执行效率很低,但是我又不知道其它的那些工具是怎么分析类似于xml数据的。还需要继续思考呀。不知道是否还有人象我一样,对分析数据感兴趣呀。
第一个问题是我该如何分析出一个元素的开始。例如<font size="4" >;开始我想用正则表达式,后来发现这个表达式并不简单。这样的表达式如:<font.*>;这是一个失败的表达式,它会匹配出<font开始,直到最后一个>之间的所有数据。当我走到这里时,我发现一切都没有我们所想象的那么简单。
----------------------------------------------------------10.11
今天在路上突然想到一个解决方法:逐个地读取字符,然后用一个变量讲读到的字符收集起来,再用正则表达式来分析,直到分析到有效的标记元素为止。
代码为:
string ParseString = "....<font size="4">...";
private void ParseFlag(string ParseString)
{
string cache;
StringReader sr = new StringReader(ParseString);
int code = sr.Read();
int index= 0;
while(code >=0)
{
cache += Convert.ToChar(code);
Match matchObj = RegEx.Match(cache, "<font.*>");//用正则表达式<font.*>来匹配查找
if(!string.IsNullOrEmpty(matchObj.Value))
{
ParseFlag(ParseString.SubString(index);//递归调用
break;
}
index ++;
}
}
以上的代码不完整,至少我现在觉得它的执行效率很低,但是我又不知道其它的那些工具是怎么分析类似于xml数据的。还需要继续思考呀。不知道是否还有人象我一样,对分析数据感兴趣呀。