public function MigrateXMLReader::__construct in Migrate 7.2
Same name and namespace in other branches
- 6.2 plugins/sources/xml.inc \MigrateXMLReader::__construct()
Prepares our extensions to the XMLReader object.
Parameters
string $xml_url: URL of the XML file to be parsed.
string $element_query: Query string in a restricted xpath format, for selecting elements to be
string $id_query: Query string to the unique identifier for an element, relative to the root of that element. This supports the full xpath syntax.
File
- plugins/sources/ xml.inc, line 964 
- Support for migration from XML sources.
Class
- MigrateXMLReader
- Makes an XMLReader object iterable, returning elements matching a restricted xpath-like syntax.
Code
public function __construct($xml_url, $element_query, $id_query) {
  $this->reader = new XMLReader();
  $this->url = $xml_url;
  $this->elementQuery = $element_query;
  $this->idQuery = $id_query;
  // Suppress errors during parsing, so we can pick them up after.
  libxml_use_internal_errors(TRUE);
  // Parse the element query. First capture group is the element path, second
  // (if present) is the attribute.
  preg_match_all('|^/([^\\[]+)(.*)$|', $element_query, $matches);
  $element_path = $matches[1][0];
  $this->elementsToMatch = explode('/', $element_path);
  $attribute_query = $matches[2][0];
  if ($attribute_query) {
    // Matches [@attribute="value"] (with either single- or double-quotes).
    preg_match_all('|^\\[@([^=]+)=[\'"](.*)[\'"]\\]$|', $attribute_query, $matches);
    $this->attributeName = $matches[1][0];
    $this->attributeValue = $matches[2][0];
  }
  // If the element path contains any colons, it must be specifying
  // namespaces, so we need to compare using the prefixed element
  // name in next().
  if (strpos($element_path, ':')) {
    $this->prefixedName = TRUE;
  }
}