为什么要使用XML解析器?

时间:2010-08-30 01:01:28

标签: php xml xml-parsing

我是有点经验丰富的PHP脚本编写者,但我只是喜欢解析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解析器的实际用途是什么?

提前致谢! :)

5 个答案:

答案 0 :(得分: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>';

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

答案 1 :(得分: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解析器编写的代码不会。

答案 2 :(得分:7)

XML解析器:

  • 处理编码
  • 可能有xpath支持
  • 允许您轻松修改和保存XML;追加/删除子节点,添加/删除属性等
  • 不需要将整个文件加载到内存中(DOM解析器除外)
  • 了解名称空间
  • ...

答案 3 :(得分:6)

如果a_tag有属性,你会如何分解同一个文件?

毕竟,

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

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

答案 4 :(得分:1)

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