diff options
author | Christian Schneider | 2007-02-09 13:44:31 +0000 |
---|---|---|
committer | Christian Schneider | 2007-02-09 13:44:31 +0000 |
commit | 05deab1128a4c7168f377e3f9a9e51a38f38d0e9 (patch) | |
tree | 1ea06d42a005d46d32284fc3bf7a01749e6b3a8d /xml.class | |
parent | bbc8b31566fcae832081f1d890dfa6fd5c5c842a (diff) | |
download | itools-05deab1128a4c7168f377e3f9a9e51a38f38d0e9.tar.gz itools-05deab1128a4c7168f377e3f9a9e51a38f38d0e9.tar.bz2 itools-05deab1128a4c7168f377e3f9a9e51a38f38d0e9.zip |
Allow xml tags with special characters like date.taken (Flikr)
Diffstat (limited to 'xml.class')
-rw-r--r-- | xml.class | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -119,10 +119,15 @@ function flatten($with_attr = false) return $result; } +# Strip namespace and convert extra characters to _ +function _make_identifier($name) +{ + return preg_replace(array('/^.*:/', '/\W/'), array('', '_'), $name); +} + function start_element($parser, $name, $attrs) { - $name = strtr($name, "-", "_"); - $name = preg_replace('/^.*:/', '', $name); + $name = it_xml::_make_identifier($name); $name = $this->_p['prefix'] . $name; if (!class_exists($name)) @@ -139,14 +144,14 @@ function start_element($parser, $name, $attrs) if ($attrs) { foreach ($attrs as $key => $val) - $this->_stack[0]->attr[preg_replace('/^.*:/', '', $key)] = $val; + $this->_stack[0]->attr[it_xml::_make_identifier($key)] = $val; } } function end_element($parser, $name) { - $name = preg_replace('/^.*:/', '', $name); - $name = strtr($name, "-", "_"); + $name = it_xml::_make_identifier($name); + if (!$this->_stack[0]->consume($this->_p)) { if (is_array($this->_stack[1]->$name)) |