我是有点经验丰富的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解析器的实际用途是什么?
提前致谢! :)
答案 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解析器:
答案 3 :(得分:6)
如果a_tag
有属性,你会如何分解同一个文件?
explode("<a_tag>" ...
的工作方式与explode("<a_tag attr='value'>" ...
不同。
XML Parsers理解XML规范。爆炸只能处理最简单的情况,很可能在很多情况下失败。
答案 4 :(得分:1)
使用经过验证的XML解析方法将使代码更易于维护且易于阅读。如果架构发生变化,它还将使其更容易适应,并且可以更容易地确定错误条件。 XPath和XSLT存在是有原因的,它们被证明是以合理,清晰的方式处理XML数据的方法。我建议您使用适合您情况的任何一种情况。请记住,仅仅因为您认为您只是为某个特定目的编写代码,您永远不会知道一段编写良好的代码可以演变成什么。