php - 在 PHP 中修改 SVG 和子属性
问题描述
我有这个我试图稍微修改的 SVG:
$svgData = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<title>railroad-train-1</title>
<path
d="M6.555,18.418a1,1,0,0,0-1.387.277l-2.5,3.75a1,1,0,0,0,1.664,1.11l2.5-3.75A1,1,0,0,0,6.555,18.418Z"
></path>
<path d="M21.332,22.445l-2.5-3.75a1,1,0,1,0-1.664,1.11l2.5,3.75a1,1,0,0,0,1.664-1.11Z"></path>
<path
d="M20,15V4.511A4.516,4.516,0,0,0,15.489,0H8.511A4.516,4.516,0,0,0,4,4.511V15a2.23,2.23,0,0,0,1.8,2.192A34.368,34.368,0,0,0,12,18a34.407,34.407,0,0,0,6.211-.81A2.218,2.218,0,0,0,20,15ZM13,2.25A.25.25,0,0,1,13.25,2h2.239A2.513,2.513,0,0,1,18,4.511V8.34a.25.25,0,0,1-.306.244,24.753,24.753,0,0,0-4.454-.561.251.251,0,0,1-.24-.25ZM6,4.511A2.513,2.513,0,0,1,8.511,2H10.75a.25.25,0,0,1,.25.25V7.773a.251.251,0,0,1-.24.25,24.753,24.753,0,0,0-4.454.561A.25.25,0,0,1,6,8.34ZM7.75,13H6.25a.5.5,0,0,1-.5-.5v-1a.5.5,0,0,1,.5-.5h1.5a1,1,0,0,1,0,2Zm6.5,2.852a.251.251,0,0,1-.22.249A17.606,17.606,0,0,1,12,16.25,17.606,17.606,0,0,1,9.97,16.1a.251.251,0,0,1-.22-.249V14a.253.253,0,0,1,.25-.25h4a.253.253,0,0,1,.25.25ZM17.75,13h-1.5a1,1,0,0,1,0-2h1.5a.5.5,0,0,1,.5.5v1A.5.5,0,0,1,17.75,13Z"
></path>
</svg>';
$iconSVG = new \DOMDocument();
$iconSVG->loadXML($svg_data);
$svgTag = $iconSVG->getElementsByTagName("svg");
$svgTag->setAttribute('role', 'img');
$svgTag->setAttribute('fill', 'white');
$titleTag = $iconSVG->getElementsByTagName("title");
$titleTag->nodeValue = 'my custom title';
$items[$i]['iconSVG'] = $iconSVG->saveXML($iconSVG->documentElement);
..但我收到此错误并且没有任何修改起作用:
Fatal error: Call to undefined method DOMNodeList::setAttribute()
解决方案
当你打电话时getElementsByTagName()
- 这会给你一个匹配节点的列表(因此是DOMNodeList
),但是你期望只有 1 被找到,你可以使用$svgTag[0]
.
稍后您可以使用相同的地方$titleTag[0]->nodeValue
$iconSVG = new \DOMDocument();
$iconSVG->loadXML($svgData);
$svgTag = $iconSVG->getElementsByTagName("svg");
$svgTag[0]->setAttribute('role', 'img');
$svgTag[0]->setAttribute('fill', 'white');
$titleTag = $iconSVG->getElementsByTagName("title");
$titleTag[0]->nodeValue = 'my custom title';
推荐阅读
- intellij-idea - Intellij:摆脱 iml 文件
- amazon-web-services - 在 AWS ECS 中使用 docker-compose.yml 和 ecs-params.yml 文件运行多个任务定义,具有不同的启动类型和卷挂载
- java - 是否有某种带有空闲 TTL 的锁/信号量
- typescript - 在打字稿中的基于 Vue 类的组件中键入 prop
- delphi - TWebBrowser:如何知道 OnNewWindow2 事件中的 URL?
- amazon-web-services - ELB 是否用于出站流量?
- arrays - 将数组从模态组件发送到前一个组件并显示结果 - Angular
- node.js - 如何通过服务帐户(Google Calendar API)获取资源日历的事件?
- rest - API 请求未通过身份验证
- html - 如何使用 flexbox 或网格在视口中心对齐一项?