我想减少当前值超过一定数量但似乎无法做到的节点的值。
没有发生错误,但我想要影响的节点没有更新。
是否有人能够指出以下内容有什么问题:
$xml = '<?xml version="1.0"?>
<property>
<edited>true</edited>
<images>
<image>
<is_required><![CDATA[true]]></is_required>
<sorted_number><![CDATA[1]]></sorted_number>
</image>
<image>
<is_required><![CDATA[true]]></is_required>
<sorted_number><![CDATA[2]]></sorted_number>
</image>
<image>
<is_required><![CDATA[true]]></is_required>
<sorted_number><![CDATA[4]]></sorted_number>
</image>
<image>
<is_required><![CDATA[true]]></is_required>
<sorted_number><![CDATA[5]]></sorted_number>
</image>
</images>
</property>';
$sorted_target_number = 3;
foreach($xml->xpath('/property/images/image') as $tempImgNode){
$s_number = $tempImgNode->sorted_number;
if ($s_number > $sorted_target_number) {
--$s_number;
}
};
因此,sorted_numbers为4和5的图像节点将更改为3和4。
谢谢,
标记
答案 0 :(得分:1)
您发布的代码肯定没有运行。没有创建SimpleXml
个对象。
$xml = simplexml_load_string($xml);
要进行减法,请使用自引用技术:
$s_number[0] = $s_number - 1;
它允许更新SimpleXml
元素以及删除:unset($node[0])
。查看更多:https://stackoverflow.com/a/16062633/2016456
看到它有效:https://eval.in/536643
上述操作并不保留CDATA
。如果需要,您需要通过一些额外的步骤来处理,例如: How to write CDATA using SimpleXmlElement?或使用DOM
。