【问题标题】:Validating and possibly correcting an XML file that I have验证并可能更正我拥有的 XML 文件
【发布时间】:2012-06-09 23:40:58
【问题描述】:

我有一个需要使用的 XML 文件(随机资源)。我正在使用 PHP DOM Document 来处理这个文档和 DOMXPath 来查询对象。但是,XPath 查询不返回任何类型的数据(resultset->length = 0)。查询是正确的,我不担心它的语法。我还尝试了 DOMDOcument->getElementsByTagName("tag") ,这也返回了一个空结果。

在上面的上下文中,当我调用

时,如何检查我的 DOMDocument 是否能够加载
DOMDocument->Load('file.xml')


[also tried 

$xmlFile = file_get_contents('file.xml')
DOMDocument->loadXML($xmlFile)]

我假设如果 XML 文件有问题,那么我很可能根本无法查询 DOMDocument 吗? 无论如何我要检查是否 a) 当我调用 DOMDocument->Load/loadXML 方法时,文档完全被加载 b) 使用外部资源验证 XML 文件(我只知道 w3 学校验证器) c) 如果 XML 文件不正确,我可以纠正它吗?

感谢所有抽出时间阅读本文的人。

最好, 帕里贾特卡利亚

【问题讨论】:

  • 打开错误报告并一直向上:ini_set('display_errors', true); error_reporting(-1);。如果DOMDocument 无法正确加载或处理 XML,它肯定会发出某种错误。您还需要将DOMDocument 存储到一个变量中。您可能是,但从代码中并不清楚。请在您的问题中更加具体:向我们展示 XML 和查询代码。
  • 是的,我正在这样做..基本上 $doc = new DOMDocument() ;

标签: php xml domdocument xml-validation


【解决方案1】:

在做任何事情之前尝试打开它:

libxml_use_internal_errors(true);

然后在加载您的 XML 后,使用以下命令查找错误:

$errors = libxml_get_errors();

您可以遍历$errors(它是libXMLError 对象的数组)。

例如:

libxml_use_internal_errors(true);

try
{
    $doc = new DOMDocument();
    $doc->load("somebadxmlfile.xml");
}
catch (Exception $e)
{
    $errors = libxml_get_errors();

    foreach ($errors as $error)
    {
        echo $error->message . " [ Line: " . $error->line . " | Column: " . $error->column . " | Level: " . $error->level . " | File: " . $error->file . " ]";
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    相关资源
    最近更新 更多