【问题标题】:How do I remove an element and its content from an XML file [duplicate]如何从 XML 文件中删除元素及其内容 [重复]
【发布时间】:2019-12-18 01:06:23
【问题描述】:

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

但仍然收到&lt;w:drawing&gt; 标签,有什么建议吗?

我想要得到的结果

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

【问题讨论】:

  • $result 能得到什么?
  • 结果我想得到 some text here
  • $xml 是字符串吗?如果可以的话,您的代码对我有用(换行除外)
  • 是的,它是一个字符串,我已经重新检查了我的代码并且工作正常..
  • 那很好。您应该关闭您的问题,因为它有效。

标签: php html regex xml


【解决方案1】:

您在这里得到的不是完整的 XML 文档,因此我对其进行了一些更改。无论如何,切勿尝试使用正则表达式解析 XML。 绝不!

这是一个使用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>

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-09-12
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多