如何从XML文件中删除元素及其内容

时间:2017-06-10 09:24:34

标签: php html regex xml

以下是我需要从

中删除<w:drawing>标记及其内容的文字
<w:document>
<w:t>some text here</w:t>
<w:drawing>drawing image</w:drawing>
</w:document>

我试过这个

$result = preg_replace('/<w:drawing\b[^>]*>(.*?)<\/w:drawing>/i', '', $xml);

但是仍然有<w:drawing>个标签,有什么建议吗?

结果我想要

<w:document>
<w:t>some text here</w:t>
</w:document>

2 个答案:

答案 0 :(得分:2)

你在这里得到的不是一份完整的XML文档,所以我对它做了一些修改。无论如何,永远不要尝试使用正则表达式解析XML。的 NEVER !!

以下是使用SimpleXML的简单示例,但DOMDocument也可以正常使用:

$xml = <<< XML
<?xml version="1.0" encoding="UTF-8"?>
<w:document xmlns:w="w">
    <w:t>some text here</w:t>
    <w:drawing>drawing image</w:drawing>
</w:document>
XML;
$doc = new SimpleXMLElement($xml, 0, false, "w");
$doc->registerXPathNamespace("w", "w");
$drawings = $doc->xpath("//w:drawing");
foreach ($drawings as &$drawing) {
    unset($drawing[0]);
}
$new_xml = $doc->asXML();
echo $new_xml;

输出:

<?xml version="1.0" encoding="UTF-8"?>
<w:document xmlns:w="w">
    <w:t>some text here</w:t>

</w:document>

答案 1 :(得分:-3)

你只需要用这样的东西替换你的正则表达式

$result = preg_replace('/<w:drawing>.*<\/w:drawing>/', '', $xml);