#1 23.05.11 17:56
XML + Php (read\write simplexml)
Привет! Народ подскажите такой вопрос - считываю с базы данные, в том числе и в xmlформате - распарисиваю их, по названию нод и атрибутов. и теперь вопрос как сохранить из формы по сабмиту обратно эти ноды и атрибуты??
Для парсинга и нахождения в массиве нужного ноды и атрибута пользуюсь вот таким кодом:
function xml2array($xml) {
if (get_class($xml) == 'SimpleXMLElement') {
$attributes = $xml->attributes();
if (!empty($attributes)) {
foreach( $attributes as $k=>$v) {
if ($v) $a[$k] = (string) $v;
}
}
$x = $xml;
$xml = get_object_vars($xml);
}
if (is_array($xml)) {
if (count($xml) == 0) return (string) $x; // for CDATA
foreach($xml as $key=>$value) {
$r[$key] = xml2array($value);
}
if (isset($a)) $r['@attributes'] = $a; // Attributes
return $r;
}
return (string) $xml;
}
function find($xml, $xpath) {
$el = new SimpleXMLElement($xml);
$filter = $el->xpath($xpath);
$chunks = explode('/', trim($xpath, '/'));
$result = xml2array($filter[0]);
//print_r(array_count_values ($result));
if (substr($chunks[count($chunks)-1], 0, 1) == '@') {
$key = substr($chunks[count($chunks)-1], 1);
$result = isset($result['@attributes'][$key]) ? $result['@attributes'][$key] : NULL;
}
//echo "aaa:".mb_convert_encoding($result, 'cp1251', 'utf-8');
return mb_convert_encoding($result, 'cp1251', 'utf-8');
}
Offline

