/**
  * Handle event
  *
  * @param string $msg_hl7 HL7 message
  *
  * @return DOMDocument|void
  */
 function handle($msg_hl7)
 {
     $this->message = new CHL7v2Message();
     $ignored_fields = array();
     if ($this->_data_format) {
         $configs_format = $this->_data_format->_configs_format;
         if ($configs_format->ignore_fields) {
             $ignored_fields = preg_split("/\\s*,\\s*/", $configs_format->ignore_fields);
         }
         $strict = $configs_format->strict_segment_terminator;
         $this->message->strict_segment_terminator = $strict;
         if ($strict) {
             $terminator = $this->getSegmentTerminator($configs_format->segment_terminator);
             $this->message->segmentTerminator = $terminator;
         }
     }
     $this->message->ignored_fields = $ignored_fields;
     $this->message->parse($msg_hl7);
     $dom = $this->message->toXML(get_class($this), false, CApp::$encoding);
     $xpath = new CHL7v2MessageXPath($dom);
     foreach ($ignored_fields as $_ignore_field) {
         $query = "//{$_ignore_field}";
         $nodes = $xpath->query($query);
         foreach ($nodes as $_node) {
             $_node->parentNode->removeChild($_node);
         }
     }
     return $dom;
 }
 /**
  * Query
  *
  * @param string  $nodeName    The XPath to the node
  * @param DOMNode $contextNode The context node from which the XPath starts
  *
  * @return DOMNodeList
  */
 function query($nodeName, DOMNode $contextNode = null)
 {
     $xpath = new CHL7v2MessageXPath($contextNode ? $contextNode->ownerDocument : $this);
     if ($contextNode) {
         return $xpath->query($nodeName, $contextNode);
     }
     return $xpath->query($nodeName);
 }
 /**
  * Get fields tree
  *
  * @param array  &$_datatypes        Datatypes
  * @param string $datatype_name      Datatype name
  * @param string $fullpath_component Fullpath
  *
  * @return array
  */
 function readDataTypeSchema(&$_datatypes, $datatype_name, $fullpath_component)
 {
     if (array_key_exists($datatype_name, CHDataType::$typesMap)) {
         return array();
     }
     $datatype_schema = $this->message->getSchema("composite", $datatype_name);
     $datatype_xpath = new CHL7v2MessageXPath($datatype_schema);
     $fields = $datatype_xpath->query("//field");
     foreach ($fields as $_field) {
         $_component_datatype = $datatype_xpath->queryTextNode("datatype", $_field);
         $children = array();
         $this->readDataTypeSchema($children, $_component_datatype, $fullpath_component);
         $_datatypes[] = array("name" => $_component_datatype, "fullpath" => "{$fullpath_component}/{$_component_datatype}", "datatype" => $_component_datatype, "children" => $children);
     }
 }