Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
90.00% |
9 / 10 |
CRAP | |
98.81% |
83 / 84 |
| AssocXml | |
0.00% |
0 / 1 |
|
90.00% |
9 / 10 |
29 | |
98.81% |
83 / 84 |
| __construct($rootName, $rowTagName) | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
| _addTag($dom, $element, $tag, $tagName) | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
| _addToGroupNode($dom, $element, $tag, $tagName) | |
100.00% |
1 / 1 |
3 | |
100.00% |
14 / 14 |
|||
| groupNodes($groupNodeName, $nodeNameArray, $parentNodeName = null) | |
100.00% |
1 / 1 |
3 | |
100.00% |
7 / 7 |
|||
| serialize($arrayOfAssocs) | |
100.00% |
1 / 1 |
2 | |
100.00% |
7 / 7 |
|||
| _parseRow($dom, $root, $row) | |
100.00% |
1 / 1 |
2 | |
100.00% |
6 / 6 |
|||
| _parseColumn($dom, $element, $tagName, $value) | |
100.00% |
1 / 1 |
2 | |
100.00% |
7 / 7 |
|||
| _isAttribute($tagName) | |
100.00% |
1 / 1 |
8 | |
100.00% |
14 / 14 |
|||
| _addAttribute($element, $attributeName, $dom, $value) | |
0.00% |
0 / 1 |
4.00 | |
93.75% |
15 / 16 |
|||
| colIsAttribute($attributeNodeName, $attributeName, $columnName = null) | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
| <?php | |
| /** | |
| * | |
| */ | |
| namespace aae\serialize { | |
| /** | |
| * @author Axel Ancona Esselmann | |
| * @package aae\serialize | |
| */ | |
| class AssocXml { | |
| protected $_rootName, $_rowTagName; | |
| protected $_attributes = array(); | |
| protected $_groupedNodes = array(); | |
| protected $_columnAttribute = array(); | |
| public function __construct($rootName, $rowTagName) { | |
| $this->_rootName = $rootName; | |
| $this->_rowTagName = $rowTagName; | |
| } | |
| protected function _addTag($dom, $element, $tag, $tagName) { | |
| if (array_key_exists($tagName, $this->_groupedNodes)) { | |
| $this->_addToGroupNode($dom, $element, $tag, $tagName); | |
| } else { | |
| $element->appendChild($tag); | |
| } | |
| } | |
| protected function _addToGroupNode($dom, $element, $tag, $tagName) { | |
| $actualParentNodeName = $this->_groupedNodes[$tagName][1]; | |
| #$parentNode = $element->parentNode; | |
| $parent = $element; | |
| $parentNodeName = $parent->tagName; | |
| if ($actualParentNodeName == $parentNodeName) { | |
| $groupNodeName = $this->_groupedNodes[$tagName][0]; | |
| $nodeList = $parent->getElementsByTagName($groupNodeName); | |
| if ($nodeList->length < 1) { | |
| $group = $dom->createElement($groupNodeName); | |
| $parent->appendChild($group); | |
| } else { | |
| $group = $nodeList->item(0); | |
| } | |
| $group->appendChild($tag); | |
| } | |
| } | |
| public function groupNodes($groupNodeName, $nodeNameArray, $parentNodeName = null) { | |
| if (is_null($parentNodeName)) { | |
| $parentNodeName = $this->_rowTagName; | |
| } | |
| foreach ($nodeNameArray as $nodeName) { | |
| $this->_groupedNodes[$nodeName] = array($groupNodeName, $parentNodeName); | |
| } | |
| return; | |
| } | |
| public function serialize($arrayOfAssocs) { | |
| $dom = new \DOMDocument(); | |
| $root = $dom->createElement($this->_rootName); | |
| $dom->appendChild($root); | |
| foreach ($arrayOfAssocs as $row) { | |
| $this->_parseRow($dom, $root, $row); | |
| } | |
| return $dom->saveXML(); | |
| } | |
| protected function _parseRow($dom, $root, $row) { | |
| $element = $dom->createElement($this->_rowTagName); | |
| $root->appendChild($element); | |
| foreach ($row as $tagName => $value) { | |
| $this->_parseColumn($dom, $element, $tagName, $value); | |
| } | |
| } | |
| protected function _parseColumn($dom, $element, $tagName, $value) { | |
| $result = null; | |
| if ($this->_isAttribute($tagName)) { | |
| $this->_addAttribute($element, $tagName, $dom, $value); | |
| } else { | |
| $tag = $dom->createElement($tagName, $value); | |
| $this->_addTag($dom, $element, $tag, $tagName); | |
| } | |
| return $result; | |
| } | |
| protected function _isAttribute($tagName) { | |
| $isAttribute = false; | |
| foreach ($this->_attributes as $key => $value) { | |
| if ($key == $tagName or $value == $tagName) { | |
| $isAttribute = true; | |
| } | |
| } | |
| foreach ($this->_columnAttribute as $key => $value) { | |
| if ($key == $tagName or $value == $tagName) { | |
| $isAttribute = true; | |
| } | |
| } | |
| if ($isAttribute) { | |
| #echo "$tagName is an attribute"; | |
| } | |
| return $isAttribute; | |
| } | |
| protected function _addAttribute($element, $attributeName, $dom, $value) { | |
| if (array_key_exists($attributeName, $this->_columnAttribute)) { | |
| $attributeName = $this->_columnAttribute[$attributeName]; | |
| } | |
| if (!array_key_exists($attributeName, $this->_attributes)) { | |
| return; | |
| } | |
| $attributeNodeName = $this->_attributes[$attributeName]; | |
| $nodeList = $element->getElementsByTagName( $attributeName); | |
| if ($nodeList->length < 1) { | |
| $node = $dom->createElement( $attributeNodeName); | |
| $element->appendChild($node); | |
| } else { | |
| $node = $nodeList->item(0); | |
| } | |
| $attribute = $dom->createAttribute($attributeName); | |
| $attribute->value = $value; | |
| $node->appendChild($attribute); | |
| } | |
| public function colIsAttribute($attributeNodeName, $attributeName, $columnName = null) { | |
| $this->_attributes[$attributeName] = $attributeNodeName; | |
| if (!is_null($columnName)) { | |
| $this->_columnAttribute[$columnName] = $attributeName; | |
| } | |
| } | |
| } | |
| } |