这不是一个愚蠢的问题。其他人缺少print_r中的属性。 但我根本无法访问属性xlink:href。
这是我尝试过的:
$xml = simplexml_load_string($imageSVG);
$image = $xml->g->image; // works
$style = $xml->g->image->style; // works
$style = $xml->g->image['style']; // works
$remoteHref = $xml->g->image['xlink:href']; // doesn't work
$remoteHref = $xml->g->image['href']; // doesn't work
$remoteHref = $xml->g->image->href; // doesn't work
$array= $xml->g->image->attributes('xlink'); // 0 elements in the array
这是输入的XML:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="351" height="351" xml:space="preserve"><desc></desc><defs></defs><g transform="translate(145 175) scale(0.4 0.4)"><image xlink:href="http://cdn.katori.com/BfFEEXuBTrii818CNQvN_71344PL.jpg" style="stroke: none; stroke-width: 1; stroke-dasharray: ; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0,0,0); opacity: 1;" transform="translate(-300 -300)" width="600" height="600" preserveAspectRatio="none"></image></g></svg>
谢谢! -matt
答案 0 :(得分:4)
attributes
方法需要完整的命名空间,而不仅仅是前缀:
$s = '...';
$xml = new SimpleXMLElement($s);
$attributes = $xml->g->image->attributes('http://www.w3.org/1999/xlink');
echo $attributes['href'];
或使用attributes
(is_prefix
- boolean)的第二个参数并仅指定前缀:
$attributes = $xml->g->image->attributes('xlink', true);
答案 1 :(得分:0)
simplexml_load_string不适用于这种类型的:of-tags
如果您知道要解析的xml的格式,并且需要快速的黑客攻击,那么您可以随时执行类似
的操作 $imageSVG=str_replace(array('xlink:'),array('xlink-'),$imageSVG)
或
$imageSVG=str_replace(array('xlink:'),array(''),$imageSVG);
之前
simplexml_load_string($imageSVG);
希望它适合你