以下是我需要从
中删除<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>
答案 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);