想要将一个组移动到另一个组,但在某种程度上它会在一个巨大的执行时间内结束,并且该脚本永远不会结束。问题出在foreach循环休息功能ok。我没有看到任何错误
<?php
// fouten laten zien
error_reporting(~0);
ini_set('display_errors', 1);
// test bestand
$bestand = "00000000346.svg";
// maak nieuwe dom
$dom = new DOMDocument;
// laat svg in dom
$dom->load($bestand);
// krijg svg element
$svg = $dom->getElementsByTagName("svg")->item(0);
// toevoegen link attribute
$svg->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink");
// maak script tag
$script = $dom->createElement("script");
// zet script link
$script->setAttribute("xlink:href", "svg_zoom_pan.js");
// toevoegen aan svg
$dom->documentElement->appendChild($script);
// maak groep tag
$svgroot = $dom->createElement("g");
// zet een id
$svgroot->setAttribute("id", "svgroot");
// toevoegen aan svg
$dom->documentElement->appendChild($svgroot);
// krijg alle groepen
$groups = $dom->getElementsByTagName("g");
// doorloop groepen
foreach($groups as $group) {
if($group->getAttribute("id") != "svgroot") {
// clone groep
$cloned = $group->cloneNode(true);
// toevoegen aan svgroot groep
$dom->getElementById("svgroot")->appendChild($cloned);
}
}
// opslaan bestand
$dom->save("svg_" . $bestand);
?>
答案 0 :(得分:1)
getElementsByTagName
返回一个实时的节点列表。这意味着当您向文档中添加更多组时,变量$groups
将更新为包含这些新组。
由于您循环遍历元素的实时列表并在每次迭代中添加一个元素,因此实时列表会更长,循环将永远不会结束。
答案 1 :(得分:0)
如果找到要移动的解决方案:
// doorloop groepen
foreach($groups as $group) {
// verplaats alleen de andere groepen maar niet de root
if($group->getAttribute("id") != "svgroot") {
// verplaats groep in svgroot
$moved = $group->parentNode->removeChild($group);
// toevoegen aan svgroot groep
$firstgroup->appendChild($moved);
}
}
但它与svg代码相结合?
原始svg的一部分:
<?xml version="1.0" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" width="595.000" height="841.000" viewBox="0.0 0.0 595.000 841.000">
<title>Produce by DWG to SVG Converter 2012 MX</title>
<desc>Produce by DWG to SVG Converter 2012 MX</desc>
<g id="000-Onderlegger" display="visible">
<g><path d="M382.47 595.5L382.47 404.1"
fill="none" stroke="RGB(0,124,165)" stroke-width="0.709"/>
</g>
<g><path d="M382.47 404.1L384.45 404.1"
fill="none" stroke="RGB(0,124,165)" stroke-width="0.709"/>
</g>
部分已解析的代码:
<?xml version="1.0" standalone="no"?>
<?xml-stylesheet href="svg.css" type="text/css"?>
<svg xmlns="http://www.w3.org/2000/svg" width="595.000" height="841.000" viewBox="0.0 0.0 595.000 841.000" onload="init(evt)" xmlns:xlink="http://www.w3.org/1999/xlink">
<script xlink:href="svg-zoom-pan.js"/>
<g id="svgroot">
<g id="000-Onderlegger" display="none">
<g>
<path d="M382.47 404.1L384.45 404.1" fill="none" stroke="RGB(0,124,165)" stroke-width="0.709"/>
</g>
<g>
<path d="M384.45 396.46L382.47 396.46" fill="none" stroke="RGB(0,124,165)" stroke-width="0.709"/>
</g>
这里有区别:
<g>
<path d="M382.47 595.5L382.47 404.1" fill="none" stroke="RGB(0,124,165)" stroke-width="0.709"/>
</g>
<g>
<path d="M382.47 404.1L384.45 404.1" fill="none" stroke="RGB(0,124,165)" stroke-width="0.709"/>
</g>
有人知道为什么会这样吗?