- Pxp_ev_parser.process_entity PxpHelmConf.pxp_config (`Entry_content [])
- (Pxp_ev_parser.create_entity_manager ~is_document:true
- PxpHelmConf.pxp_config (Pxp_yacc.from_string doc))
- (function
- | Pxp_types.E_start_tag ("url",["value",url],_,_) -> res := Resolved url
- | Pxp_types.E_start_tag ("unresolvable",[],_,_) ->
- res := Exception (Unresolvable_URI uri)
- | Pxp_types.E_start_tag ("not_found",[],_,_) ->
- res := Exception (Key_not_found uri)
- | Pxp_types.E_start_tag (x,_,_,_) ->
- res := Exception UnexpectedGetterOutput
- | _ -> ());
- match !res with
- | Unknown -> raise UnexpectedGetterOutput
- | Exception e -> raise e
- | Resolved url -> url
+ let start_element tag attrs =
+ match tag with
+ | "url" ->
+ (try
+ res := Resolved (List.assoc "value" attrs)
+ with Not_found -> ())
+ | "unresolvable" -> res := Exception (Unresolvable_URI uri)
+ | "not_found" -> res := Exception (Key_not_found uri)
+ | _ -> ()
+ in
+ let callbacks = {
+ XmlPushParser.default_callbacks with
+ XmlPushParser.start_element = Some start_element
+ } in
+ let xml_parser = XmlPushParser.create_parser callbacks in
+ XmlPushParser.parse xml_parser (`String doc);
+ XmlPushParser.final xml_parser;
+ match !res with
+ | Unknown -> raise UnexpectedGetterOutput
+ | Exception e -> raise e
+ | Resolved url -> url