代码之家  ›  专栏  ›  技术社区  ›  esqew

为什么要使用XML解析器?

  •  2
  • esqew  · 技术社区  · 14 年前

    我是 有点 经验丰富的PHP脚本编写人员,不过我只是致力于解析XML和所有这些好东西。

    我似乎无法理解为什么要使用单独的XML解析器而不是只使用 explode 功能,看起来也很简单。以下是我一直在做的(假设路径中有一个有效的XML文件) xml.php ):

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

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

    事先谢谢!:)

    5 回复  |  直到 14 年前
        1
  •  10
  •   Alana Storm    14 年前

    简而言之,它的一致性。在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
  •  14
  •   VolkerK    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>';
    

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

        3
  •  7
  •   svens    14 年前

    XML解析器:

    • 句柄编码
    • 可能有xpath支持
    • 允许您轻松地修改和保存XML;附加/删除子节点、添加/删除属性等。
    • 不需要将整个文件加载到内存中(dom解析器除外)
    • 了解命名空间
        4
  •  6
  •   efritz    14 年前

    如果 a_tag 有属性吗?

    explode("<a_tag>" ... 工作方式与 explode("<a_tag attr='value'>" ... 毕竟。

    XML解析器理解XML规范。explode只能处理最简单的情况,并且在该情况的许多实例中很可能会失败。

        5
  •  1
  •   Dan Smith    14 年前

    使用经过验证的XML解析方法将使代码更易于维护和读取。它还可以使它在模式更改时更容易适应,并且可以更容易地确定错误条件。xpath和xslt的存在是有原因的,它们被证明是以一种明智、易读的方式处理XML数据的方法。我建议你使用在你的特定情况下适用的。记住,仅仅因为你认为你只是为了一个特定的目的而写代码,你永远不知道一段写得好的代码会演变成什么。