我正在尝试将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正在打印到屏幕上的一小部分。非常感谢您的帮助。