PHP XML 解析
Posted
技术标签:
【中文标题】PHP XML 解析【英文标题】:PHP XML Parsing 【发布时间】:2010-10-05 12:12:39 【问题描述】:在 php 中解析 XML 文件的最佳方法是什么?
第一 使用 DOM 对象
//code
$dom = new DOMDocument();
$dom->load("xml.xml");
$root = $dom->getElementsByTagName("tag");
foreach($root as $tag)
$subChild = $root->getElementsByTagName("child");
// extract values and loop again if needed
第二 使用 simplexml_load 方法
// code
$xml = simplexml_load_string("xml.xml");
$root = $xml->root;
foreach($root as $tag)
$subChild = $tag->child;
// extract values and loop again if needed
注意: 这是我知道的两个。如果有更多的填写。
想知道哪种方法最适合解析大型 XML 文件,以及哪种方法最快,无论该方法需要以何种方式实现
大小从 500KB 到 2MB 不等。如果可能的话,解析器应该能够在最短的时间内解析大小文件和大文件,并使用良好的内存。
【问题讨论】:
当我们说“巨大”时,我们在谈论多大?兆字节值? 【参考方案1】:为了易于使用,我更喜欢 simplexml_load_string。如果两者使用不同的解析文件的方法,处理速度很可能取决于 XML 文件的格式 - 在您自己的文件上尝试一下,看看哪个更适合您。
【讨论】:
【参考方案2】:这取决于您传递的文档,但 XMLReader 通常比 simplexml 和 DOM (http://blog.liip.ch/archive/2004/05/10/processing_large_xml_documents_with_php.html) 都快。就个人而言,虽然我从未使用过 XMLReader,但通常根据我是否需要编辑它来决定使用哪个:
simplexml 如果我只是在阅读文档 如果我正在修改 DOM 并将其保存回来,则为 DOM您还可以在 simplexml 和 DOM 之间转换对象。
【讨论】:
【参考方案3】:现在我开发时,所有 XML 都由 PHP 中的 simpleXML 处理。它很容易扩展,并在需要时覆盖方法。
【讨论】:
simpleXML 并不真正适合扩展。您不能覆盖构造函数,也不能将属性添加到子类,因为它们被视为新节点。最好使用组合而不是继承,即“有一个”simpleXML 而不是“是一个”simpleXML【参考方案4】:如果您正在处理 巨大 文件,请不要解析它们。请改用XSLT。这将为您节省大量内存和处理时间。
【讨论】:
【参考方案5】:我已经开始使用 XMLReader 来解析 XML 文件。在进行了一些谷歌搜索后,发现它是解析 XML 文件的最佳方式,因为它不会将整个 XML 文件加载到内存中。假设假设我的 XML 文件为 5 MB,而使用 XMLReader 解析它时,我的 5MB 内存不会被浪费。
//usage
$xml = new XMLReader();
$xml->XML($xmlString);
while($xml->read)
if($xml->localName == 'Something') // check if tag name equals something
//do something
使用 XML Reader,我们可以找到当前标签是开始标签还是结束标签,并根据需要进行操作。
【讨论】:
以上是关于PHP XML 解析的主要内容,如果未能解决你的问题,请参考以下文章