首页 > 解决方案 > 在 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​&lt;/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>

标签: phpxmlxml-parsing

解决方案


推荐阅读