减少超过特定值的

时间:2016-03-15 08:57:59

标签: php xml

我想减少当前值超过一定数量但似乎无法做到的节点的值。

没有发生错误,但我想要影响的节点没有更新。

是否有人能够指出以下内容有什么问题:

$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。

谢谢,

标记

1 个答案:

答案 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