2009-06-19 42 views
2

我正在构建一个Web表单,我的网站上的管理员可以将XML添加到textarea并将其提交到数据库表中,但我对解析XML的最佳方法有点困惑。如何在保留DOM的同时解析XML时获得详细的错误信息?

PHP脚本需要解析XML,如果有任何解析错误,它应该将解析器停止的错误消息和行/列返回给提交表单的管理员。解析之后,它需要访问DOM以使用XPath运行几次检查节点和属性的存在。

如果我使用xml_create_parser()xml_parse(),如果返回false,我可以得到详细的错误信息。但是,我解析后无法访问XML的DOM。如果我使用DOMDocument::loadXML(),从我读过的内容来看,它不会为解析错误抛出异常,它只会将它们输出到PHP日志中。

如果我第一次尝试xml_parse(),然后如果成功的话,运行DOMDocument::loadXML(),考虑到文件大多小于10KB,其中有几个是10-20KB,会是一个很好的性能指标吗?有谁知道更好的方法?

回答

6

您可以启用libxml_use_internal_errors然后 - 如果DOM文档:: load()方法失败 - 与libxml_get_errors()

<?php 
$xml = '<a> 
    <b>xyz</b> 
    <c> 
</a>'; 

libxml_use_internal_errors(true); 
$doc = new DOMDocument; 
if (!$doc->loadxml($xml)) { 
    $errors = libxml_get_errors(); 
    var_dump($errors); 
}
+0

由于查询详细的错误信息。每当我搜索时,我只是发现人们设置自己的错误处理程序,我没有看到以这种方式获取错误的行/列号的方法。 – 2009-06-19 09:19:41

相关问题