【发布时间】:2026-02-02 05:20:09
【问题描述】:
我现在已经失去了半天的时间。虽然不是专家。为什么用 php 遍历和操作 xml 比在纸上处理数据更难(看起来)?为什么不能有一个像 jQuery 这样的简单系统呢?
我一直在尝试根据一个简单的条件从一个长列表(580 个元素)中删除一些元素:if (element['attr'] == value) {remove element},但我就是没有到达那里。
这是我的代码:
$xml = simplexml_load_file('xml/suchia.xml');
$dom = new DOMDocument('1.0');
$dom->loadXML($xml->asXML());
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
foreach ($dom->getElementsByTagName('image') as $node) {
echo 'Checking '.$node->getAttribute('id').'<br />';
if ($node->getAttribute('value') == 'useless') {
echo $node->getAttribute('id').' deleted.<br />';
$node->parentNode->removeChild($node);
}
}
$dom->save('xml/suchia.xml');
我从第一个回显中看到的主要问题是 foreach 并没有遍历它看起来的每个元素。对于更长的列表(我的 xml 文件大约有 180,000 个字符),即使是简单的循环也似乎是不可能的。
XML(缩短,也许无法用一个小的 xml 文件重建我的问题):
<?xml version="1.0"?>
<suchia>
<image id="1" value="useless">
<sources>
<src>a</src>
</sources>
</image>
<image id="2" value="useless">
<sources>
<src>b</src>
</sources>
</image>
<image id="3" value="useless">
<sources>
<src>c</src>
</sources>
</image>
<image id="4" value="useless">
<sources>
<src>d</src>
</sources>
</image>
<image id="5" value="useless">
<sources>
<src>e</src>
</sources>
</image>
<image id="6" value="useless">
<sources>
<src>f</src>
</sources>
</image>
<image id="7" value="useless">
<sources>
<src>g</src>
</sources>
</image>
<image id="8" value="useful">
<sources>
<src>h</src>
</sources>
</image>
</suchia>
【问题讨论】:
标签: php xml domdocument