Skip to content

Navigation Menu

Sign in
Sign up
nuclearg edited this page Sep 18, 2014 · 12 revisions

让我们再来回顾一下组包的核心流程:

  1. 选中报文文档的根节点
  • 从上到下遍历组包样式定义,检查其匹配器是否与当前报文节点匹配。

匹配器描述了一条规则,kyou以此来分出"满足规则的报文节点"和"不满足规则的报文节点"。

匹配器的语法借鉴自CSS3和jquery的选择器,看起来与这两种东西非常类似。

总体示例

  • field
    所有报文域节点均满足匹配要求

  • struct>field
    所有父节点是报文结构报文域均满足匹配要求

  • #Name
    所有名称为Name的报文节点均满足匹配要求

  • field[type='int']
    所有type属性为int的报文节点均满足要求

  • array:empty
    所有报文数组节点,并且其内容为空

  • struct#HEAD struct>field[type='string']
    一个比较复杂的匹配器,表示的是"一个位于结构中的报文域,其type属性为string,并且一定要有一个名为HEAD的报文结构作为祖先节点"。

和jquery选择器的主要区别

jquery是"选择器"(selector),而kyou是"匹配器"(matcher)。当几个条件并列时,jquery会先在整棵dom树中_选择_出满足前面规则的节点,再从这些节点中_选择_出满足后面规则的节点。而kyou做的是检查给定的一个节点是否满足要求。

这造成的最典型的区别是,jquery中几个并列的规则,前后是包含关系;而kyou中并列的规则之间是单纯的"与"的关系。或者说,jquery选择器中,并列写在一起的各个规则是有顺序的,而kyou中并列写在一起的规则之间是无顺序的。

举一个例子如下:

struct#name:first

jquery的规则是先从整棵报文树中选择出struct类型的节点,再从中选择出名称为name的节点,再从这个列表中取出第一个。 而kyou不同,在组包时kyou首先会拿到一个待组包的报文节点,然后再去检查这个节点是不是struct、是不是名称为name,是不是结构中的第一个节点,只要这三个条件中有一个失败则返回匹配失败。

绝对路径匹配器

节点类型匹配器

节点名称匹配器

属性匹配器

过滤匹配器

管道匹配器

全部匹配器列表

全部匹配器列表

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /