【问题标题】:Remove blocks of XML lines based on 1 tag, keep the rest删除基于 1 个标记的 XML 行块,保留其余部分
【发布时间】:2019-03-30 14:16:00
【问题描述】:

我们有一个大致如下所示的 XML 文件:

<JOBS>
<JOB>
<STATE>VA</STATE>
<COUNTRY>United States</COUNTRY>
<EXTRA>Package</EXTRA>
</JOB>
</JOBS>

我们有多个条目,一半包含 EXTRA 标签,另一半不包含。我需要创建一个在标签之间搜索的脚本,确定是否有额外的标签,如果没有,删除整个代码块。我们只想保留包含 EXTRA 标记的那些。

这听起来并不难,但我不知道从哪里开始,因为我没有编程背景。最好是PHP,有没有人有什么意见或建议?

任何帮助将不胜感激

【问题讨论】:

  • 到目前为止你尝试过什么?你试过XMLReaderXMLWriter 类吗? php.net/manual/en/book.xmlreader.php & php.net/manual/en/book.xmlwriter.php
  • 我没有,我不知道从哪里开始
  • 它们实际上非常易于使用,并且使用上面显示的简单 XML 模式应该不会太难。放手一搏,如果你被困在这里,如果你证明你做了一些工作、一些研究并展示了一些代码,很多人会更愿意提供帮助。 Stack Overflow 更多的是解决特定问题,并为刚起步的开发人员提供更有经验的开发人员的建议。只是格式不正确,无法提供所需的尽可能多的信息,当网络上有大量教程可以做得比可以发布的更好时
  • 你可以用样本输入和输出来详细说明

标签: php xml replace scripting find


【解决方案1】:

如果您可以一次性加载文件(因为文件不是太大),那么使用 SimpleXML 可以快速完成此操作。使用 XPath 查找没有 &lt;EXTRA &gt; 元素的作业可以使用 //JOB[not(EXTRA)] 来完成 - 它只是说任何在其下方没有 &lt;EXTRA&gt; 元素的 &lt;JOB&gt; 元素。然后删除任何匹配的节点...

$xml = simplexml_load_file("out.xml");   // Change this depending on your source of XML
$noExtra = $xml->xpath("//JOB[not(EXTRA)]");
foreach ( $noExtra as $job )   {
    unset($job[0]);
}

echo $xml->asXML();   // just to show new data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多