You are here

private function XmlEncoder::parseXmlValue in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/serializer/Encoder/XmlEncoder.php \Symfony\Component\Serializer\Encoder\XmlEncoder::parseXmlValue()

Parse the input DOMNode value (content and children) into an array or a string.

Parameters

\DOMNode $node xml to parse:

Return value

array|string

1 call to XmlEncoder::parseXmlValue()
XmlEncoder::parseXml in vendor/symfony/serializer/Encoder/XmlEncoder.php
Parse the input DOMNode into an array or a string.

File

vendor/symfony/serializer/Encoder/XmlEncoder.php, line 319

Class

XmlEncoder
Encodes XML data.

Namespace

Symfony\Component\Serializer\Encoder

Code

private function parseXmlValue(\DOMNode $node) {
  if (!$node
    ->hasChildNodes()) {
    return $node->nodeValue;
  }
  if (1 === $node->childNodes->length && in_array($node->firstChild->nodeType, array(
    XML_TEXT_NODE,
    XML_CDATA_SECTION_NODE,
  ))) {
    return $node->firstChild->nodeValue;
  }
  $value = array();
  foreach ($node->childNodes as $subnode) {
    $val = $this
      ->parseXml($subnode);
    if ('item' === $subnode->nodeName && isset($val['@key'])) {
      if (isset($val['#'])) {
        $value[$val['@key']] = $val['#'];
      }
      else {
        $value[$val['@key']] = $val;
      }
    }
    else {
      $value[$subnode->nodeName][] = $val;
    }
  }
  foreach ($value as $key => $val) {
    if (is_array($val) && 1 === count($val)) {
      $value[$key] = current($val);
    }
  }
  return $value;
}