; Set all form actions 'simple-sqil.html' attribute /html/body//form action ; Count /log/main/count replace /html/body//span[@id='count'] ; ; Navigation Forms /log/navigation/row repeat /html/body//form[@name='navigation'] { ./idx content .//button//span[@class='navigation'] ; ./line_ub attribute .//input[@name='line_ub'] value ; ; all others /log/parameter[@name!='line_ub'] repeat .//input[@name='other'] { ; Move name/value from parameter to input ./@value attribute . value ; ./@name attribute . name ; } ; } ; ; Previous button /log/parameter[@name!='line_ub'] repeat /html/body//form[@name='page']//input[@name='other'] { ; Move name/value from parameter to input ./@value attribute . value ; ./@name attribute . name ; } ; /log/main/row[last()]/line attribute /html/body//form[@name='page']//input[@name='line_ub'] value ; ; Filter /log/filter repeat /html/body//select[@name='filter']/option { descendant-or-self::node()/@name attribute . value ; . content . ; } ; Remove Filter /log/parameter repeat /html/body//form[@name='remove'] { ; Iterate over the other parameters ; Ugly, but works following-sibling::parameter|preceding-sibling::parameter repeat .//input { ; Move name/value from parameter to input ./@value attribute . value ; ./@name attribute . name ; } ; ; and on the button ./@name replace .//span[@id='remove_name'] ; ./@value replace .//span[@id='remove_value'] ; } ; ; Table rows - we must restrict to td children to not ; overwrite the headers /log/main/row repeat /html/body//table//tr[./td] { ; ; A way for "join conditions" is missing. ; ./* repeat ./td[@class=local-name(data())] { ; . content .//button ; ; . attribute .//input[@name=local-name(data())] value ; ; } ; ./idx content ./td[@class='idx']//button ; ./idx attribute ./td[@class='idx']//input[@name='idx'] value ; ./remote_host content ./td[@class='remote_host']//button ; ./remote_host attribute ./td[@class='remote_host']//input[@name='remote_host'] value ; ./time content ./td[@class='time'] ; ./request_method content ./td[@class='request_method']//button ; ./request_method attribute ./td[@class='request_method']//input[@name='request_method'] value ; ./request_uri content ./td[@class='request_uri']//button ; ./request_uri attribute ./td[@class='request_uri']//input[@name='request_uri'] value ; ./status content ./td[@class='status']//button ; ./status attribute ./td[@class='status']//input[@name='status'] value ; ./bytes_sent content ./td[@class='bytes_sent'] ; ; substring-before(substring-after(./referer,'//'),'/') content ./td[@class='referer']//a ; ./referer content ./td[@class='referer']//a ; ./referer attribute ./td[@class='referer']//a href ; ./agent content ./td[@class='agent']//button ; ./agent attribute ./td[@class='agent']//input[@name='agent'] value ; ./usertrack content ./td[@class='usertrack']//button ; ./usertrack attribute ./td[@class='usertrack']//input[@name='usertrack'] value ; ./id content ./td[@class='id']//button ; ./id attribute ./td[@class='id']//input[@name='id'] value ; ./child_pid content ./td[@class='child_pid']//button ; ./child_pid attribute ./td[@class='child_pid']//input[@name='child_pid'] value ; ./cookie content ./td[@class='cookie']//button ; ./cookie attribute ./td[@class='cookie']//input[@name='cookie'] value ; ./machine_id content ./td[@class='machine_id']//button ; ./machine_id attribute ./td[@class='machine_id']//input[@name='machine_id'] value ; ./request_file content ./td[@class='request_file']//button ; ./request_file attribute ./td[@class='request_file']//input[@name='request_file'] value ; ./remote_logname content ./td[@class='remote_logname']//button ; ./remote_logname attribute ./td[@class='remote_logname']//input[@name='remote_logname'] value ; ./remote_user content ./td[@class='remote_user']//button ; ./remote_user attribute ./td[@class='remote_user']//input[@name='remote_user'] value ; ./request_duration content ./td[@class='request_duration'] ; ./request_line content ./td[@class='request_line']//button ; ./request_line attribute ./td[@class='request_line']//input[@name='request_line'] value ; ./request_protocol content ./td[@class='request_protocol']//button ; ./request_protocol attribute ./td[@class='request_protocol']//input[@name='request_protocol'] value ; ./request_time content ./td[@class='request_time']//button ; ./request_time attribute ./td[@class='request_time']//input[@name='request_time'] value ; ./request_args content ./td[@class='request_args']//button ; ./request_args attribute ./td[@class='request_args']//input[@name='request_args'] value ; ./server_port content ./td[@class='server_port']//button ; ./server_port attribute ./td[@class='server_port']//input[@name='server_port'] value ; ./ssl_cipher content ./td[@class='ssl_cipher']//button ; ./ssl_cipher attribute ./td[@class='ssl_cipher']//input[@name='ssl_cipher'] value ; ./ssl_keysize content ./td[@class='ssl_keysize']//button ; ./ssl_keysize attribute ./td[@class='ssl_keysize']//input[@name='ssl_keysize'] value ; ./ssl_maxkeysize content ./td[@class='ssl_maxkeysize']//button ; ./ssl_maxkeysize attribute ./td[@class='ssl_maxkeysize']//input[@name='ssl_maxkeysize'] value ; ./time_stamp content ./td[@class='time_stamp']//button ; ./time_stamp attribute ./td[@class='time_stamp']//input[@name='time_stamp'] value ; ./virtual_host content ./td[@class='virtual_host']//button ; ./virtual_host attribute ./td[@class='virtual_host']//input[@name='virtual_host'] value ; ./line content ./td[@class='line']//button ; ./line attribute ./td[@class='line']//input[@name='line'] value ; ; This is done for all tags /log/parameter repeat .//input[@name='others'] { ; Move name/value from parameter to input ./@value attribute . value ; ./@name attribute . name ; } } ; ; /log/parameter/@name repeat /html/body//table//tr { ; } ; TODO: Decision - ; Empty nodeset - don't touch vs. remove (e.g. content)