Как мне преобразовать ВСЕ элементы в SVG в массив, используя PHP? - PullRequest
1 голос
/ 04 мая 2019

Я пытаюсь проанализировать ВСЕ элементы из файла SVG в массив PHP. К сожалению, только несколько элементов извлекаются.

Я попытался преобразовать SVG в массив, используя simplexml_load_string, но когда я попытался print_r, на экран выводились только несколько элементов.

Моя попытка:

$xmlstring = file_get_contents('hta_svg_element_test.svg');
$arr = simplexml_load_string($xmlstring);
print_r($arr);

Код SVG:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg:svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   width="3600"
   height="4800"
   viewBox="0 0 3600 4800"
   version="1.1"
   id="svg8"
   inkscape:version="0.92.3 (2405546, 2018-03-11)"
   sodipodi:docname="hta_svg_element_test.svg">
  <HTA_GLOBALS
     HTA_PATH_QTY="1"
     HTA_TEXT_QTY="5" />
  <svg:defs
     id="defs2" />
  <svg:metadata
     id="metadata5">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
        <dc:title />
      </cc:Work>
    </rdf:RDF>
  </svg:metadata>
  <svg:g
     inkscape:label="Layer 1"
     inkscape:groupmode="layer"
     id="layer1"
     transform="translate(0,973.00002)">
    <svg:rect
       style="opacity:1;vector-effect:none;fill:#7822ff;fill-opacity:1;stroke:none;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
       id="HTA_PATH_1"
       width="1186.1003"
       height="1291.1198"
       x="1056.3706"
       y="775.26257"
       HTA_PATH_MAX_WIDTH="2000"
       HTA_PATH_MAX_HEIGHT="500" />
    <svg:text
       xml:space="preserve"
       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:133.33332825px;line-height:1.25;font-family:'Drone Ranger 02';-inkscape-font-specification:'Drone Ranger 02, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
       x="1025.4825"
       y="27.772198"
       id="HTA_TEXT_1"
       HTA_MAX_WIDTH="500"
       HTA_MAX_HEIGHT="100"><svg:tspan
         sodipodi:role="line"
         id="tspan43"
         x="1025.4825"
         y="27.772198">TEST TEXT</svg:tspan></svg:text>
  </svg:g>
</svg:svg>

Мои результаты:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [width] => 3600
            [height] => 4800
            [viewBox] => 0 0 3600 4800
            [version] => 1.1
            [id] => svg8
        )

    [HTA_GLOBALS] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [HTA_PATH_QTY] => 1
                    [HTA_TEXT_QTY] => 5
                )

        )

)

Я ожидаю, что все элементы SVG в пределах всего файла будут помещены в массив и будут легко доступны. Не только небольшой набор, который print_r печатает на экран. Любая помощь очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...