php - 在 PHP 中解析 xml 并删除一个节点
问题描述
我试图解析 XML 并从 XML 中删除节点“displayTextFlow”。下面是我的代码:
$filePath = file_get_contents('sample.xml');
$xml = new SimpleXMLIterator($filePath);
$iterator = new RecursiveIteratorIterator($xml, RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $key => $element) {
if ($key == 'displayTextFlow') {
unset($iterator[$key]);
}
}
$finalXML = $xml->asXML();
print_r($finalXML);
exit;
在我的示例 XML 中,我不确定标签“displayTextFlow”的确切位置。它可能出现在任何其他地方。所以我需要编写一个代码来解析 XML 并删除所有地方的标签“displayTextFlow”注意:我只需要使用 SimpleXMLIterator 来完成它。
请检查示例 XML:
<?xml version="1.0"?>
<document savedInEditor="false">
<pages numIncludedPages="2">
<item includeInOutputComputed="true">
<frames>
<item id="2555D134-0F82-49A8-B3CD-4536DB607AE5" name="New Frame">
sample text
</item>
<item id="C15D2F81-3925-4E3E-B1F4-3F6729CAF8AD" name="New Frame 1">
sample text
</item>
<item id="AD0216C3-CD41-4994-B8AC-9E2DACF7439E" name="New Frame 2">
<displayTextFlow>
<TextFlow xmlns="http://ns.adobe.com/textLayout/2008" />
</displayTextFlow>
<textFlow>
<TextFlow>
<span>Sampe span</span>
</TextFlow>
</textFlow>
</item>
<item id="0DBBAAB8-A572-49BF-8E77-BDAC88219DC7" name="New Frame 3">
<displayTextFlow>
<TextFlow xmlns="http://ns.adobe.com/textLayout/2008" />
</displayTextFlow>
<textFlow>
<TextFlow>
<span>Sampe span frame 3</span>
</TextFlow>
</textFlow>
</item>
<item id="4B392B37-3B2C-443A-A6B6-4219184D848D" name="New Frame 4">
<displayTextFlow>
<TextFlow xmlns="http://ns.adobe.com/textLayout/2008" />
</displayTextFlow>
<textFlow>
<TextFlow>
<span>Sampe span frame 4</span>
</TextFlow>
</textFlow>
</item>
<item id="E82B3F8D-02F9-45E5-8955-4F161C0DCAF4" name="New Frame 5">
<displayTextFlow>
<TextFlow xmlns="http://ns.adobe.com/textLayout/2008">
<span>needs to be removed</span>
</TextFlow>
</displayTextFlow>
<textFlow>
<TextFlow>
<span>needs to be removed</span>
</TextFlow>
</textFlow>
</item>
</frames>
<sectionOptions includeInOutput="true" newSection="true" pageStart="1"/>
</item>
</pages>
<item id="E82B3F8D-02F9-45E5-8955-4F161C0DCAF4" name="sample 1">
<displayTextFlow>
<TextFlow xmlns="http://ns.adobe.com/textLayout/2008">
<span>needs to be removed</span>
</TextFlow>
</displayTextFlow>
<textFlow>
<TextFlow>
<span>needs to be removed</span>
</TextFlow>
</textFlow>
</item>
<item id="E82B3F8D-02F9-45E5-8955-4F161C0DCAF4" name="sample 2">
<displayTextFlow>
<TextFlow xmlns="http://ns.adobe.com/textLayout/2008">
<span>needs to be removed</span>
</TextFlow>
</displayTextFlow>
<textFlow>
<TextFlow>
<span>needs to be removed</span>
</TextFlow>
</textFlow>
</item>
</document>
解决方案
推荐阅读
- spreadsheet - Google Docs - 将日期转换为一年中的某一天
- postgresql - 如何使用 PostgreSQL 中的 SQLAlchemy 可重复地查询随机行?
- firebase - 群组的 Firebase 存储安全规则
- reactjs - 当我更新 MERN 堆栈中的记录时,它会删除对象
- php - 从 YAML 文件加载自定义配置块
- google-cloud-platform - 无法连接到实例
- excel - 如何将工作表复制到新工作表但仅作为值?
- c++ - 使用 Google 基准测试时返回值会发生什么变化?
- c# - x 秒后执行 - 使用异步任务或计时器滴答
- ruby-on-rails - `max_locks_per_transaction` 可以增加到非常大的数量吗?