通过PHP脚本选择并获取特殊的svg元素

问题描述 投票:0回答:1

需要通过PHP脚本在SVG文件内的特殊(动态)polygon中获取并修改组g中的id首先。使用DOMDocument()和DOMXPath找不到此元素。请帮助

PHP:

$svg = file_get_contents($svgPath);
doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
$xpath = new DOMXPath($doc);
$xpath->registerNamespace('svg','http://www.w3.org/2000/svg');
**$curPolygon = $xpath -> query("//svg:g[@id='fl_1']/polygon[0]");**
if ($curPolygon ) {
  $curPolygon [0]->setAttribute('fill', '#ae8f72');
}
$svg = $doc->saveXML($doc);
echo $svg;

SVG:

<svg>
...
<g id="Flats">

    ...

    <g id="fl_1">
        <polygon fill="none" points="0,0 436.5,0 436.5,197.7 257,197.7 257,267.1 196.9,267.1 196.9,293.9 0,293.9"/>
        <g> <rect x="209.9" y="84.8" fill="#AE8E72" width="56.3" height="22.1"/> </g>
        <text transform="matrix(1 0 0 1 214.1091 101.5043)"><tspan x="0" y="0">4</tspan></text>
        <text transform="matrix(1 0 0 1 235.5047 101.5042)">132,0</text>
    </g>

    <g id="fl_2">
        <polygon fill="none" points="404.5,388.7 404.5,390 251.7,390 251.7,192.3 436.5,192.3 436.5,388.7"/>
        <g> <rect x="327.7" y="278.4" fill="#AE8E72" width="56.3" height="22.1"/> </g>
        <text transform="matrix(1 0 0 1 331.8962 295.0608)"><tspan x="0" y="0">1</tspan></text>
        <text transform="matrix(1 0 0 1 354.9925 295.0607)">40,7</text>
    </g>

    ...
</g>
...
</svg>

var_dump($q)的结果是object(DOMNodeList)#6 (1) { ["length"]=> int(0) }

php parsing svg domdocument domxpath
1个回答
0
投票

代码中的几件事。首先是您似乎没有加载文档...

$doc->loadXML($svg);

第二部分是XPath表达式。我认为,如果您将名称空间svg作为默认名称空间,则需要将此名称应用于XPath表达式的两个部分。而且XPath数组从1开始,因此表达式应该是

$curPolygon = $xpath -> query("//svg:g[@id='fl_1']/svg:polygon[1]");
© www.soinside.com 2019 - 2024. All rights reserved.