2010-08-30 146 views
2

我是有点经验丰富的PHP脚本,但我只是解析XML和所有的好东西。为什么使用XML解析器?

我似乎无法包装我的头为什么会使用单独的XML解析器而不是使用explode函数,这似乎是一样简单。这就是我一直在做(假设在路径xml.php有效的XML文件):

$contents = file_get_contents("xml.php"); 
$array1 = explode("<a_tag>", $contents); 
$array2 = explode("</a_tag>", $array1[1]); 
$data = $array2[0]; 

所以我的问题是,什么是XML解析器的实际使用中,如果你能值只是分成数组并从该点提取数据?

在此先感谢! :)

+1

'explode'是只属于游戏开发的方法名称。 – ChaosPandion 2010-08-30 01:03:42

+0

这是为什么? >。> – esqew 2010-08-30 01:07:49

+0

**请**,否... – SLaks 2010-08-30 01:13:55

回答

10

简而言之,它的一致性。在XML广泛使用之前,有许多未公开的格式用于保存文件中的信息。 XML背后的动机之一是创建一个定义良好的标准文档格式。有了这种明确定义的格式,只要文档遵循上述明确定义的格式,就可以开发一套通用的解析工具,这些解析工具可以一致地处理文档。

在一些特定情况下,您的示例代码将起作用。但是,如果文档更改

... 
<!-- adding an attribute --> 
<a_tag foo="bar">Contents of the Tag</a_tag> 
... 

... 
<!-- adding a comment to the contents --> 
<a_tag>Contents <!-- foobar --> of the Tag</a_tag> 
... 

您的解析代码可能会中断。使用正确定义的XML解析器编写的代码不会。

+0

感谢您的解释。 – esqew 2010-08-30 01:42:28

7

XML解析器:

  • 手柄编码
  • 可能有XPath支持
  • 让您轻松地修改和保存XML;追加/删除子节点,添加/删除属性等
  • 不需要加载整个文件到内存中(除了从DOM解析器)
  • 知道关于命名空间
  • ...
14

请原谅我没有进入细节,但对于初学者尝试解析

$contents = '<a xmlns="urn:something"> 
    <a_tag> 
    <b>..</b> 
    <related> 
     <a_tag>...</a_tag> 
    </related> 
    </a_tag> 
    <foo:a_tag xmlns:foo="urn:something"> 
    <![CDATA[This is another <a_tag> element]]> 
    </foo:a_tag> 
</a>'; 

与爆炸的方法。当你完成我们可以继续一些棘手的事情;-)

6

如果a_tag有一个属性,你将如何爆炸同一个文件?毕竟,

explode("<a_tag>" ...的工作方式不同于explode("<a_tag attr='value'>" ...

XML解析器理解XML规范。爆炸只能处理最简单的情况,并且很可能会在很多情况下失败。

1

使用经验证的XML解析方法将使代码更易于维护和阅读。如果模式发生变化,它也会使它更容易适应,并且可以更容易地确定错误条件。 XPath和XSLT的存在是有原因的,它们是以合理,清晰的方式处理XML数据的经证明的方式。我建议你使用适用于你的情况的任何一种。记住,仅仅因为你认为你只是为了一个特定的目的而编写代码,你永远不会知道一段写得很好的代码可以发展成什么样子。