You are here

protected function FeedsXPathParserXML::setup in Feeds XPath Parser 7

Same name and namespace in other branches
  1. 6 FeedsXPathParserXML.inc \FeedsXPathParserXML::setup()

Classes that use FeedsXPathParserBase must implement this.

Parameters

array $source_config: The configuration for the source.

FeedsFetcherResult $fetcher_result: A FeedsFetcherResult object.

Return value

DOMDocument The DOMDocument to perform XPath queries on.

Overrides FeedsXPathParserBase::setup

File

./FeedsXPathParserXML.inc, line 16
s Contains FeedsXPathParserXML.

Class

FeedsXPathParserXML
XPath parsing for XML.

Code

protected function setup($source_config, FeedsFetcherResult $fetcher_result) {
  if (!empty($source_config['exp']['tidy']) && extension_loaded('tidy')) {
    $config = array(
      'input-xml' => TRUE,
      'wrap' => 0,
      'tidy-mark' => FALSE,
    );

    // Default tidy encoding is UTF8.
    $encoding = $source_config['exp']['tidy_encoding'];
    $raw = tidy_repair_string($fetcher_result
      ->getRaw(), $config, $encoding);
  }
  else {
    $raw = $fetcher_result
      ->getRaw();
  }
  $options = LIBXML_NONET;
  $options |= defined('LIBXML_COMPACT') ? LIBXML_COMPACT : 0;
  $options |= defined('LIBXML_PARSEHUGE') ? LIBXML_PARSEHUGE : 0;
  $document = new DOMDocument();
  $document->strictErrorChecking = FALSE;
  $document->recover = TRUE;
  $use = $this
    ->errorStart();
  $success = $document
    ->loadXML($raw, $options);
  $this
    ->errorStop($use, $source_config['exp']['errors']);
  if (!$success) {
    throw new Exception(t('There was an error parsing the XML document.'));
  }
  return $document;
}