/** * @param Document|Element $parent * @param \DOMElement $node * @param bool $addNameAttribute */ public function addNode($parent, \DOMElement $node, $addNameAttribute = FALSE) { switch ($this->getType($node)) { case 'object': $result = $parent->appendElement('json:object'); $this->appendChildNodes($result, $node, TRUE); break; case 'array': $result = $parent->appendElement('json:array'); $this->appendChildNodes($result, $node, FALSE); break; case 'number': $result = $parent->appendElement('json:number', $node->nodeValue); break; case 'boolean': $result = $parent->appendElement('json:boolean', $node->nodeValue); break; case 'null': $result = $parent->appendElement('json:null'); break; default: $result = $parent->appendElement('json:string', $node->nodeValue); break; } if ($addNameAttribute) { $name = $node->localName; if ($node->hasAttributeNS(self::XMLNS_JSONDOM, 'name')) { $name = $node->getAttributeNS(self::XMLNS_JSONDOM, 'name'); } $result['name'] = $name; } }
/** * @param Element $parent * @param string $name * @param string $value */ private function appendField(Element $parent, $name, $value) { $qname = QualifiedName::normalizeString($name, self::DEFAULT_QNAME); $child = $parent->appendElement($qname, $value); if ($qname !== $name) { $child->setAttributeNS(self::XMLNS, 'json:name', $name); } }
private function appendValueTo(Element $parent, $token) { $itemNode = $parent->appendElement(strtolower($token->name)); if (!empty($token->parameters)) { $parametersNode = $this->getWrapperNode($itemNode, $this->_nodeNames['parameters']); foreach ($token->parameters as $name => $parameter) { $parameterNode = $parametersNode->appendElement(strtolower($name)); $this->appendValueNode($parameterNode, strtolower(isset($this->_parameters[$name]) ? $this->_parameters[$name] : $this->_nodeNames['default-type']), $parameter); } } if (!empty($token->value)) { $tokenType = $token->type ?: (isset($this->_components[$token->name]) ? $this->_components[$token->name] : 'unknown'); if (is_array($tokenType)) { $tokenValues = $this->getValuesAsList($token->value, $tokenType); foreach ($tokenValues as $tokenName => $tokenValue) { $this->appendValueNode($itemNode, $tokenName, $tokenValue); } } else { $this->appendValueNode($itemNode, strtolower($tokenType), $token->value); } } }