Как извлечь значения атрибутов из svg?

rossomaha20101

Мне нужно взять из файла svg значения атрибутов с помощью php. Например
<svg x="0" y="0" width="400" height="400">
    <line x1="0" y1="0" x2="200" y2="200" stroke-width="1" stroke="rgb(0,0,0)"/>
</svg>
Надо извлечь значения x, y, width, height,x1,y1,x2,y2,stroke-width,stroke. Знаю, что подобная реализация есть из xml(объектная модель документа). Может кто-нибудь знает как такое реализовывается?
3 ответа

rossomaha20101

$svg = simplexml_load_file('svg.xml');
echo 'svg x: ', $svg['x'];
echo 'line stroke: ', $svg->line[0]['stroke'];


rossomaha20101

А как обработать файл например такого содержания:
<?xml version='1.0' standalone='yes'?>
<svg x="0" y="0" width="400" height="400">
    <line x1="0" x2="200" y1="0" y2="200" stroke-width="2" stroke="rgb(0,0,0)" />
    <rect x="5" y="12" width="8" height="57" fill = "#FFFFFF" stroke-width="4" stroke="rgb(0,0,0)" />
    <line x1="5" x2="12" y1="8" y2="57" stroke-width="4" stroke="rgb(0,0,0)" />
</svg>
так, чтобы линии и прямоугольники складывалиcь в массив:
shapes = [ ['line', 0, 200, 0, 200, 'rgb(0,0,0)', 2],
        ['rectangle', 5 , 12, 8, 57, 'rgb(0,0,0)', 4],
             ['line', 5, 12, 8, 57, 'rgb(0,0,0)', 4]];


rossomaha20101

$shapes = array();
$svg = simplexml_load_file('svg.xml');
foreach ($svg as $shape) {
    switch ($shape->getName()) {
        case 'line':
            $shapes[] = array(
                'line',
                $shape['x1'],
                $shape['x2'],
                $shape['y1'],
                $shape['y2'],
                $shape['stroke'],
                $shape['stroke-width'],
            );
        break;
 
        case 'rect':
            $shapes[] = array(
                'rectangle',
                $shape['x1'],
                $shape['x2'],
                $shape['y1'],
                $shape['y2'],
                $shape['stroke'],
                $shape['stroke-width'],
                // $shape['fill'], # а этого забыли?
            );
        break;
    }
}
 
print_r($shapes);
 
// а чего у Вас результат в JavaScript, когда раздел - PHP?
echo json_encode($shapes);