无分组的PHP XML
我将使用PHP解析一个SVG文件,我已经用PHP SimpleXML做了一些测试,效果很好,但是它将所有具有相同类型的对象组合在一起,这对我的SVG不好 假设我有如下SVG文件:无分组的PHP XML,php,xml,Php,Xml,我将使用PHP解析一个SVG文件,我已经用PHP SimpleXML做了一些测试,效果很好,但是它将所有具有相同类型的对象组合在一起,这对我的SVG不好 假设我有如下SVG文件: <svg> <g>SOME SVG</g> <path d="SOME X AND Y's"/> <g>SOME MORE SVG</g> </svg> 这一切都可以很好地编辑数据,但当我想再次将其转换回SVG时,我
<svg>
<g>SOME SVG</g>
<path d="SOME X AND Y's"/>
<g>SOME MORE SVG</g>
</svg>
这一切都可以很好地编辑数据,但当我想再次将其转换回SVG时,我已经失去了对象的排序顺序!对于普通XML,这可能不是问题,但对于SVG文件,对象的顺序也是层排序顺序,因此如果我将输出转换回SVG,我将得到:
<svg>
<g>SOME SVG</g>
<g>SOME MORE SVG</g>
<path d="SOME X AND Y's"/>
</svg>
一些SVG
再来点SVG
然后,“更多SVG”组可能会重叠并位于路径图形的顶部,即使路径应该位于“更多SVG”组的顶部。我该如何解决这个问题
我已经看到,我可以向所有对象添加例如order=“X”,但是由于文件从一开始就已经有了排序顺序,这似乎是不必要的。谢谢大家! 使用时,您不会遇到以下问题:
$svg = '<svg>
<g>SOME SVG</g>
<path d="SOME X AND Y\'s"/>
<g>SOME MORE SVG</g>
</svg>';
$dom = new DOMDocument;
$dom->loadXml($svg);
$xpath = new DOMXpath($dom);
// selecting only g nodes directly under svg (root node)
$gNodes = $xpath->query('/svg/g'); // $gNodes will be of type: DOMNodeList with every element being of type: DOMElement, which extends DOMNode
foreach ($gNodes as $gNode) {
// doing stuff with $gNode
$gNode->nodeValue .= ' adding stuff';
}
echo $dom->saveXml();
$svg=”
一些SVG
再来点SVG
';
$dom=新的DOMDocument;
$dom->loadXml($svg);
$xpath=newdomxpath($dom);
//仅选择svg(根节点)正下方的g节点
$gNodes=$xpath->query('/svg/g');//$gNodes的类型为:DOMNodeList,每个元素的类型为:domeElement,它扩展了DOMNode
foreach($gNodes作为$gNode){
//用$gNode做事情
$gNode->nodeValue.=“添加内容”;
}
echo$dom->saveXml();
输出:
<?xml version="1.0"?>
<svg>
<g>SOME SVG adding stuff</g>
<path d="SOME X AND Y's"/>
<g>SOME MORE SVG adding stuff</g>
</svg>
一些SVG添加东西
更多的SVG添加内容
有用链接:
DOMXPath
,并添加了一些手册链接供进一步阅读。希望有帮助。谢谢你,非常有帮助!但是我仍然找不到如何从每个gNode获取完整的xml?我尝试使用echo$gNode->textContent,但没有返回任何结果。我需要->saveXml()之类的东西,但只需要$gNode。
<?xml version="1.0"?>
<svg>
<g>SOME SVG adding stuff</g>
<path d="SOME X AND Y's"/>
<g>SOME MORE SVG adding stuff</g>
</svg>