/**
  * Parse values of resource fields and TVs. Set resource fields and return TVs.
  * @param modResource $resource
  * @param $file
  * @param array $elements
  * @return array
  */
 public function parseElements(modResource &$resource, $file, $elements = array())
 {
     if (empty($elements)) {
         return false;
     }
     $doc = new DOMDocument();
     $doc->preserveWhiteSpace = false;
     $doc->formatOutput = true;
     $doc->loadHTML($file);
     $xpath = new DOMXPath($doc);
     $body = $doc->documentElement;
     $tvs = array();
     foreach ($elements as $field => $selector) {
         if ($resource->getField($field, true)) {
             $fieldValue = $this->getFieldValue($selector, $body, $xpath);
             if ($fieldValue !== false) {
                 $resource->set($field, $fieldValue);
             }
         } else {
             $tv = $this->modx->getObject('modTemplateVar', array('name' => $field));
             if ($tv) {
                 $tvs[$field] = $this->getFieldValue($selector, $body, $xpath);
             }
         }
     }
     return $tvs;
 }