分析:
定义结构体(类)存储每一个元素节点
1 | typedef struct Node { |
使用C++中的vector<Element>(Java中使用List<Element>)存储整个文档。
在文档中,元素e的父节点就是e前面第一个level小于e的元素。
查询分为以下三种情况:
(1)id选择器。题目告诉我们,文档中不同的元素不会有相同的id属性。
(2)标签选择器。匹配的标签可能有很多个。
(3)后代选择器。题目提示我们:除最后一级外,前面的部分都可以尽量匹配层级小的元素。
因此,我们可以从后代选择器的最后一个选择器selector开始,在文档中寻找匹配的元素。如果能找到这样的元素e,则在e的祖先元素中,寻找与selector的前一个选择器相匹配的元素。当遍历到根结点或者已经找到与后代选择器相匹配的元素时,循环结束。
注意:
1.id属性区分大小写,而标签不区分大小写。
2.后代选择器:A B,其中A和B均为标签选择器或者id选择器,表示选择满足选择器B的所有元素,且满足这些元素有祖先元素满足选择器A。因此,只要有祖先元素满足选择器A即可,父元素并不一定要满足选择器A。
- C++版
1 |
|
- Java版
1 | import java.util.ArrayList; |