gpt4 book ai didi

php - 如何用PHP获取SVG标签内容

转载 作者:可可西里 更新时间:2023-10-31 22:12:42 24 4
gpt4 key购买 nike

我想用 PHP 获取 SVG 标签内容。

测试.svg:

<?xml version="1.0" encoding="utf-8"?>
<!-- comment -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="202.5px" height="226.084px" viewBox="0 0 202.5 226.084" enable-background="new 0 0 202.5 226.084" xml:space="preserve">
<g>
<path d="M0,13.628c47.7940,13.628z"/>
<polygon points="108.48,207.874 145.506,196.948 145.506,204.536 108.48,214.854 "/>
<path fill="none" stroke="#000000" d="M114.55,223.959"/>
</g>
<g>
<path fill="none" stroke="#000000" d="M114.55,223.959"/>
</g>
<anythingElse>
<path fill="none" stroke="#000000" d="M114.55,223.959"/>
<anythingElse>
</svg>

PHP:

$svg = new SimpleXMLElement( file_get_contents( 'test.svg' )  );

$svg->registerXPathNamespace('svg', 'http://www.w3.org/2000/svg');
$svg->registerXPathNamespace('xlink', 'http://www.w3.org/1999/xlink');

现在,我想获取字符串形式的 svg 标签内容。

期望的结果(硬编码示例):

$content =  '<g>
<path d="M0,13.628c47.7940,13.628z"/>
<polygon points="108.48,207.874 145.506,196.948 145.506,204.536 108.48,214.854 "/>
<path fill="none" stroke="#000000" d="M114.55,223.959"/>
</g>
<g>
<path fill="none" stroke="#000000" d="M114.55,223.959"/>
</g>
<anythingElse>
<path fill="none" stroke="#000000" d="M114.55,223.959"/>
<anythingElse> ';

//编辑:

我不想寻找 g 标签:'/svg:svg/svg:g'。因为不能保证在 svg 内部会有一个 g 标签。可能有不止一个 g 标签或一些其他标签。

我想获取开始和结束 svg 标签之间的所有内容。

最佳答案

您已经正确地看到(更有可能:从 a previous answer 中提供给您的示例代码复制并粘贴而无需进一步理解)您需要在此处为​​您的 xpath 注册 XML namespace ,因为没有它在 XML 中的前缀:

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="202.5px" height="226.084px" viewBox="0 0 202.5 226.084" enable-background="new 0 0 202.5 226.084" xml:space="preserve">

它只是 URI http://www.w3.org/2000/svg ,没有给出前缀。它是那个 <svg> 根元素的命名空间。

因此你需要注册前缀(其他已经有前缀的命名空间应该已经自动注册了):

$svg->registerXPathNamespace('svg', 'http://www.w3.org/2000/svg');

这是你目前所做的。

现在要在 xpath 查询中使用您注册的前缀,请在标记名前加上它:

/svg:svg/svg:g[1]

应该为您提供该 SVG 命名空间中的第一个 <g> 元素。如果这还需要进一步解释/澄清,请告诉我。

参见 online demo

这也正是你之前问题概述的原因:

关于php - 如何用PHP获取SVG标签内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16228874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com