我想用PHP获取SVG标记内容.
test.svg:
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">
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标签:’/ svg:svg / svg:g’.
由于无法保证svg内部会有g标签.可能有超过一个g标签或一些其他标签.
我想获得开始和结束svg标签之间的所有内容.
解决方法:
您已经看到了正确的(更可能是:从a previous answer中提供给您的示例代码中进行复制和粘贴,无需进一步了解)您需要在此处为xpath注册XML命名空间,因为它没有前缀在XML中:
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]
应该给你第一个< g>该SVG命名空间中的元素.如果仍需要进一步解释/澄清,请告诉我.
这也是上一个问题的原因:
标签:php,namespaces,xml,svg,simplexml
来源: https://codeday.me/bug/20190529/1178545.html