【发布时间】:2017-02-14 19:55:28
【问题描述】:
XMl 如下所示,
<text font-family="Helvetica" font-size="25" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1;" >
<tspan x="-100" y="7.87" style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: ; opacity: 1;">t</tspan>
<tspan x="-93" y="7.87" style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: ; opacity: 1;">e</tspan>
<tspan x="-79" y="7.87" style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: ; opacity: 1;">s</tspan>
<tspan x="-66" y="7.87" style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: ; opacity: 1;">t</tspan>
</text>
我想要做的是,保留第一个 tspan 并将所有其他 tspan 值附加到第一个 tspan 并删除所有其他值。
他是想要的输出,
<text font-family="Helvetica" font-size="25" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1;" >
<tspan x="-100" y="7.87" style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: ; opacity: 1;">test</tspan>
</text>
为此我做了什么,
$previousValue = null;
$first = $text->tspan[0];
foreach($text->tspan as $k2=>$span){
if(is_object($span)){
$style = $span->attributes()->style;
if($previousValue) {
if(strcmp($style,$previousValue) === 0){
$first.=$span;
//$dom=dom_import_simplexml($span); $dom->parentNode->removeChild($dom);
}
}
$previousValue = $style;
}
}
$text->tspan[0] = $first;
这将生成完美的第一个节点,但不会正确删除其他节点。 我什至试过这个,
$dom=dom_import_simplexml($span); $dom->parentNode->removeChild($dom);
但它只是删除 1 个节点然后打破循环。不知道那里发生了什么。我在那里做错了吗?
【问题讨论】:
标签: php xml xml-parsing simplexml