Skip to content
Snippets Groups Projects
Commit 52a637da authored by Tim Steiner's avatar Tim Steiner
Browse files

Updates to Plist class to be able to generate a plist.

parent f5f7ccbb
Branches
Tags
No related merge requests found
......@@ -5,13 +5,28 @@ class Unl_Plist
static public function plistToArray($xml)
{
$dom = DOMDocument::loadXML($xml);
$xPath = new DOMXPath($dom);
$root = $xPath->query('plist/*')->item(0);
$plist = $dom->documentElement;
if ($plist->nodeName == 'plist') {
$root = $plist->childNodes->item(0);
} else {
$xPath = new DOMXPath($dom);
$root = $xPath->query('plist/*')->item(0);
}
return self::_parseNode($root);
}
static public function arrayToPlist($array)
{
$dom = new DOMDocument('1.0', 'UTF-8');
$root = $dom->createElement('plist');
$root->setAttribute('version', '1.0');
$dom->appendChild($root);
self::_generateNode($dom, $root, $array);
return $dom->saveXML();
}
static protected function _parseNode($node)
{
switch ($node->nodeName) {
......@@ -84,4 +99,69 @@ class Unl_Plist
}
return $array;
}
static protected function _generateNode(DOMDocument $dom, DOMNode $parentNode, $node)
{
if (is_array($node)) {
$type = 'array';
$keys = array_keys($node);
for($i = 0; $i < count($keys); $i++) {
if ($i !== $keys[$i]) {
$type = 'dict';
}
}
if ($type == 'array') {
self::_generateArray($dom, $parentNode, $node);
} else {
self::_generateDict($dom, $parentNode, $node);
}
} else if (is_string($node)) {
self::_generateString($dom, $parentNode, $node);
} else if (is_int($node)) {
self::_generateInt($dom, $parentNode, $node);
} else if (is_bool($node)) {
self::_generateBool($dom, $parentNode, $node);
}
}
static protected function _generateArray(DOMDocument $dom, DOMNode $parentNode, $node)
{
$array = $dom->createElement('array');
$parentNode->appendChild($array);
foreach ($node as $aNode) {
self::_generateNode($dom, $array, $aNode);
}
}
static protected function _generateDict(DOMDocument $dom, DOMNode $parentNode, $node)
{
$dict = $dom->createElement('dict');
$parentNode->appendChild($dict);
foreach ($node as $key => $aNode) {
$dict->appendChild($dom->createElement('key', $key));
self::_generateNode($dom, $dict, $aNode);
}
}
static protected function _generateInt(DOMDocument $dom, DOMNode $parentNode, $node)
{
$parentNode->appendChild($dom->createElement('integer', $node));
}
static protected function _generateString(DOMDocument $dom, DOMNode $parentNode, $node)
{
$parentNode->appendChild($dom->createElement('string', $node));
}
static protected function _generateBool(DOMDocument $dom, DOMNode $parentNode, $node)
{
if ($node) {
$parentNode->appendChild($dom->createElement('true'));
} else {
$parentNode->appendChild($dom->createElement('false'));
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment