如何使用PHP将SVG中的所有元素转换为数组?

时间:2019-05-04 15:08:53

标签: php xml svg

我正在尝试将SVG文件中的所有元素解析为PHP数组。不幸的是,只有少数元素被提取。

我尝试使用simplexml_load_string将SVG转换为数组,但是当我尝试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正在打印到屏幕上的一小部分。非常感谢您的帮助。

0 个答案:

没有答案