I live in Omaha.
 
Navigation
 
Search
 
Random Image
CBSet_121953335701.jpg
 
Me. Elsewhere.
 
Archives
 
Darcy
 
Recently Read
 
Things I Like
KDE
 
License
 
Disappointed In SimpleXML

So I’m a little disappointed in PHP5′s SimpleXML object. Don’t get me wrong, it works great for accessing XML, but it’s terrible for deep manipulation. The biggest problem is that you can’t append SimpleXMLElement objects to each other.

For instance, I was working on a little project tracker that would use all XML for storage. Here is the var_dump of my XML file.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
object(SimpleXMLElement)#1 (1) {
  ["project"]=>
  array(3) {
    [0]=>
    object(SimpleXMLElement)#4 (5) {
      ["idstring"]=>
      string(10) "1180050874"
      ["name"]=>
      string(22) "Example Project Bottom"
      ["created"]=>
      string(19) "2007-05-24 17:57:29"
      ["modified"]=>
      string(19) "2007-05-24 17:59:44"
      ["contact"]=>
      array(2) {
        [0]=>
        object(SimpleXMLElement)#5 (3) {
          ["name"]=>
          string(10) "John Hobbs"
          ["title"]=>
          string(12) "Project Lead"
          ["email"]=>
          string(20) "j0hn@velvetcache.org"
        }
        [1]=>
        object(SimpleXMLElement)#6 (3) {
          ["name"]=>
          string(9) "Mom Hobbs"
          ["title"]=>
          string(3) "Mom"
          ["email"]=>
          string(19) "mom@velvetcache.org"
        }
      }
    }
    [1]=>
    object(SimpleXMLElement)#3 (5) {
      ["idstring"]=>
      string(10) "1180050874"
      ["name"]=>
      string(19) "Example Project Top"
      ["created"]=>
      string(19) "2007-05-24 17:57:29"
      ["modified"]=>
      string(19) "2007-05-24 18:57:44"
      ["contact"]=>
      array(2) {
        [0]=>
        object(SimpleXMLElement)#7 (3) {
          ["name"]=>
          string(10) "John Hobbs"
          ["title"]=>
          string(12) "Project Lead"
          ["email"]=>
          string(20) "j0hn@velvetcache.org"
        }
        [1]=>
        object(SimpleXMLElement)#8 (3) {
          ["name"]=>
          string(9) "Mom Hobbs"
          ["title"]=>
          string(3) "Mom"
          ["email"]=>
          string(19) "mom@velvetcache.org"
        }
      }
    }
    [2]=>
    object(SimpleXMLElement)#2 (5) {
      ["idstring"]=>
      string(10) "1180050892"
      ["name"]=>
      string(22) "Example Project Middle"
      ["created"]=>
      string(19) "2007-05-24 18:45:06"
      ["modified"]=>
      string(19) "2007-05-24 18:45:06"
      ["contact"]=>
      object(SimpleXMLElement)#9 (3) {
        ["name"]=>
        string(10) "John Hobbs"
        ["title"]=>
        string(12) "Project Lead"
        ["email"]=>
        string(20) "j0hn@velvetcache.org"
      }
    }
  }
}

Long, I know. The point is that even though the structure looks pretty normal, you can’t do this, in this case in a sort function:

1
2
3
$temp = $projects->project[0];
$projects->project[0] = $projects->project[2];
$projects->project[2] = $temp;

You get the error message:

Warning:  sortProjects() [function.sortProjects]: It is not yet possible to assign complex types to properties in /var/www/timetracker/index.php on line 63
Warning:  sortProjects() [function.sortProjects]: It is not possible to assign complex types to nodes in /var/www/timetracker/index.php on line 63

That, my friends, is a bummer. You can’t assign sub-elements into the tree. Bummer. Now I have to switch back to my normal MySQL.

Posted May 24th, 2007 - Permalink
Categories: Geek
Tags: , ,
You can leave a comment, or trackback from your own site.
 
Possibly Related Posts
 
Adjacent Posts
 
Comments
 
Copyright © 2006 - 2010 John Hobbs
get userping