原始问题如下,但我更改了标题,因为我认为找到具有相同疑问的其他人会更容易。最后,XHTML文档是一个XML文档。
这是一个初学者的问题,但我想知道您认为哪个是在PHP5中解析XHTML文档的最佳库?
我已经使用Tidy从HTML文件(使用Word:S创建)生成了XHTML,并知道我需要替换它们中的一些元素(比如和元素,替换
中的一些属性标签)。
我没有非常使用XML,在PHP(Simple XML,DOM等)中解析似乎有很多选项,我不知道是否所有这些都可以做我需要的,一个是最容易使用的。
对不起我的英语,我是阿根廷人。谢谢!
我有更多信息:我有很多HTML页面,在Word 97中完成。我使用Tidy进行清理并在XHTML Strict中进行清理,所以现在它们都是XML兼容的。我想使用XML解析器来查找一些元素并替换它们(我这样做的逻辑并不重要)。例如,我希望所有页面都使用相同的CSS样式表和类属性,以实现统一的外观。它们都是包含法律文件的静态页面,没有什么奇怪的。我应该使用哪些扩展程序? SimpleXML够用吗?我是否应该学习DOM而不是更难?
答案 0 :(得分:6)
答案 1 :(得分:4)
只是为了澄清这里的困惑。 PHP有许多XML库,因为php4在这方面没有很好的选择。从PHP5开始,您可以选择SimpleXml,DOM和sax-based expat parser。后者也存在于php4中。 php4也有一个DOM扩展,不和php5相同。
DOM和SimpleXml是同一问题域的替代品;他们将文档存入内存并让您以树形结构的形式访问它。 DOM是一个相当庞大的api,但它也非常一致,并且它以多种语言实现,这意味着您可以跨语言重用您的知识(例如在Javascript中)。 SimpleXml最初可能更容易。
SAX解析器是一个不同的野兽。它将xml文档视为标记流。如果您处理非常大的文档,这非常有用,因为您不需要将它全部保存在内存中。
对于您的使用,我可能会使用DOM api。
答案 2 :(得分:4)
DOM 是一种标准的,与语言无关的API,适用于由W3C标准化的XML等分层数据。它是一个功能丰富的API。它是基于对象的,因为每个节点都是一个对象。
当你不仅想要阅读或写作,而且想要对现有文档中的节点进行大量操作(例如在其他文档之间插入节点,更改结构等)时,DOM是很好的。
< / LI>SimpleXML 是一个特定于PHP的API,它也是基于对象的,但它的目的是比DOM更简洁:简单的任务,比如查找a的值节点或查找其子元素需要的代码少得多。它的API不如DOM丰富,但它仍然包含XPath查找等功能,以及使用多命名空间文档的基本功能。而且,重要的是,它仍然保留了文档的所有功能,例如XML CDATA部分和注释,即使它不包含操作它们的函数。
SimpleXML非常适合只读:如果您只想读取XML文档并将其转换为另一种形式,那么它将为您节省大量代码。当您想要生成文档或进行基本操作(例如添加或更改子元素或属性)时,它也相当不错,但是对现有文档进行大量操作会变得复杂(但并非不可能)。例如,在另外两个之间添加子元素并不容易; addChild仅在其他元素之后插入。 SimpleXML也无法进行XSLT转换。它没有'getElementsByTagName'或getElementById'之类的东西,但是如果你知道XPath,你仍然可以使用SimpleXML做这种事情。
SimpleXMLElement对象有点'神奇'。如果var_dump / printr / var_export与其完整的内部表示不对应,则它公开的属性。它公开了它的一些子元素,好像它们是可以使用 - &gt;访问的属性。运算符,但仍然在内部保留完整的文档,您可以使用[]运算符访问名称为保留字的子元素,就像它是关联数组一样。
您不必完全提交其中一个,因为PHP实现了以下功能:
如果您使用的是SimpleXML并且需要使用需要DOM节点的代码,那么这很有用。反之亦然。
PHP还提供了第三个XML库:
XML Parser ( SAX 的实现,一种与语言无关的接口,但在手册中未被该名称引用)的级别要低得多图书馆,服务于不同的目的。它不会为您构建对象。它基本上只是让你更容易编写自己的XML解析器,因为它完成了前进到下一个令牌的工作,并找出了令牌的类型,例如标签名称是什么,以及它是一个开始或结束标签,为你。然后你必须编写每次遇到令牌时应该运行的回调。所有任务(例如将文档表示为树中的对象/数组,操作文档等)都需要单独实现,因为您可以使用XML解析器编写一个低级解析器。
如果您有特定的内存或速度要求,XML Parser功能仍然非常有用。有了它,就可以编写一个解析器,它可以解析一个非常长的XML文档,而不会立即将所有内容保存在内存中。此外,如果您对所有数据不感兴趣,并且不需要或希望将它放入树或一组PHP对象中,那么它可以更快。例如,如果您想浏览XHTML文档并查找所有链接,并且您不关心结构。
答案 3 :(得分:1)
我更喜欢SimpleXMLElement,因为它很容易用来浏览元素。
编辑:它说没有可用的版本信息,但它在PHP5中可用,至少5.2.5但可能更早。
这是个人选择,但有很多XML extensions。
请记住,如果您的标记无效,许多XML解析器都会犹豫不决 - XHTML应该是XML但不总是!
答案 4 :(得分:0)
自从我在PHP中使用XML解析以来已经很长时间了(2年或更长时间),但我总是从XML_Parser Pear package获得了良好,可用的结果。话虽如此,我对PHP5的接触很少,所以我现在还不知道这些日子里是否有更好的内置替代品。
答案 5 :(得分:0)
去年我在PHP5中进行了一些XML解析,并决定使用SimpleXML的组合。
如果要创建新的XML树或添加到现有的XML树,DOM会更有用,它会更灵活。
答案 6 :(得分:0)
这实际上取决于你想要完成的事情。 为了提取相当大量的数据,I.E许多记录,比如来自商店网站的产品信息,我可能会使用Expat,因为它应该更快一点...... 就个人而言,我已经拥有足够大的XML来创造显着的性能提升。 在这些数量上,您可能也在使用SQL。
我建议使用SimpleXML。 它非常直观,易于使用/编写。 此外,XPath也很适用。
从来没有真正使用过DOM,但是如果你正在使用XML Parser来处理你所描述的那么大的东西,你可能想要使用它,因为它比SimpleXML更有用。
您可以在W3C学校阅读所有三个:
http://www.w3schools.com/php/php_xml_parser_expat.asp