猿问

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

需要首先通过 php 脚本在 SVG 文件内部具有特殊(动态)的polygon组中获取和修改。使用 DOMDocument() 和 DOMXPath 找不到此元素。请帮忙gid


PHP:


$svg = file_get_contents($svgPath);

$doc = new DOMDocument();

$doc->loadXML($svg);

$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) }


精慕HU
浏览 152回答 1
1回答

函数式编程

您的代码中的几件事。首先是您似乎没有加载文档...$doc->loadXML($svg);第二部分是 XPath 表达式。我认为如果您将命名空间svg作为默认命名空间,那么您需要将其应用于 XPath 表达式的两个部分。XPath 数组也从 1 开始,所以表达式应该是$curPolygon&nbsp;=&nbsp;$xpath&nbsp;->&nbsp;query("//svg:g[@id='fl_1']/svg:polygon[1]");
随时随地看视频慕课网APP
我要回答