如题,
主要想请教NodeFilter这个类的两个应用。假如有如下html标签:
<div class=AAA>
...
</div>
则,我们可以通过创建如下NodeFilter对象,提取其间的文本:
NodeFilter filter =
new AndFilter (
new TagNameFilter ("div"),
new HasAttributeFilter("class", "AAA"));我这里想请教,
1. 如果该html标签为:
<div class1=AAA class2=BBB>
...
</div>
即,标签中有两个属性值,
该如何创建相应的NodeFilter对象?2. 对于如下嵌套标签:
<div class=AAA>
<p src=BBB>
...
</p>
</div>
该如何创建NodeFilter对象,提取其中的文本?谢谢!!
主要想请教NodeFilter这个类的两个应用。假如有如下html标签:
<div class=AAA>
...
</div>
则,我们可以通过创建如下NodeFilter对象,提取其间的文本:
NodeFilter filter =
new AndFilter (
new TagNameFilter ("div"),
new HasAttributeFilter("class", "AAA"));我这里想请教,
1. 如果该html标签为:
<div class1=AAA class2=BBB>
...
</div>
即,标签中有两个属性值,
该如何创建相应的NodeFilter对象?2. 对于如下嵌套标签:
<div class=AAA>
<p src=BBB>
...
</p>
</div>
该如何创建NodeFilter对象,提取其中的文本?谢谢!!
NodeFilter filter =
new AndFilter(
new AndFilter (
new TagNameFilter ("div"),
new HasAttributeFilter("class1", "AAA")),new HasAttributeFilter("class2", "BBB")
);
//并不是需要所有属性才能取到该节点,只要满足条件就可以取出,NodeFilter filter = new TagNameFilter
//("div");可以取出所有div.
NodeFilter filter =
new AndFilter (
new TagNameFilter ("P"),
new HasAttributeFilter("src", "BBB"));//这样就可以取到p了,如果只想取到<div class=AAA>下的,就加一个HasParentFilter,和上面的一样.
之所以需要用嵌套表示,
是因为,用嵌套表示,才能够将这段文本唯一的表示出来。
如果只用<p src=BBB>,会有其他的文本也符合这个模板。那该如何表示这样的嵌套呢?
怎么用HasParentFilter呢?
谢谢!
NodeFilter filter =
new AndFilter(
new AndFilter (
new TagNameFilter ("P"),
new HasAttributeFilter("src", "BBB")),
new HasParentFilter(
new AndFilter (
new TagNameFilter ("div "),
new HasAttributeFilter("class", "AAA")))
)
);
我今天试一下。其实,我最终的想法是这样:
我不想针对每个不同的页面,都写一份相应的解析工具,
而是想通过配置的方式,告诉程序改如何组织这些NodeFilter等逻辑类。初步的想法是,
可能需要对NodeFilter的相关类,再按照组合模式等设计模式进行封装,
来实现我所希望的逻辑的组合。也请大家多提意见。
谢谢!
对简单的html标签(就是属性名和属性值的字符长度比较短)能够解析出其中的内容;
但如果对如下稍微复杂的html标签,就读不出来内容:
<strong id="ctl00_MainContentPlaceHolder_strongid" class="hotel_goldmedal">
北京奥克伍德华庭
</strong>
读到的字符串为空。这是怎么回事呢?