为什么要使用XML解析器?

esq*_*qew 2 php xml xml-parsing

我是一个有点经验丰富的PHP脚本编写者,但我只是喜欢解析XML和所有好东西.

explode似乎无法理解为什么人们会使用单独的XML解析器而不是仅仅使用该函数,这似乎同样简单.这是我一直在做的(假设路径上有一个有效的XML文件xml.php):

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

所以我的问题是,如果您可以将值分离为数组并从该点提取数据,那么XML解析器的实际用途是什么?

提前致谢!:)

Vol*_*erK 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>';
Run Code Online (Sandbox Code Playgroud)

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


Ala*_*orm 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>
...
Run Code Online (Sandbox Code Playgroud)

您的解析代码可能会破坏.使用正确定义的XML解析器编写的代码不会.


sve*_*ens 7

XML解析器:

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


efr*_*itz 6

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

explode("<a_tag>" ...explode("<a_tag attr='value'>" ...毕竟会有不同的工作方式.

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