当前位置: 首页 > 知识库问答 >
问题:

如何禁用警告产生的DOMDocument::模式验证()时,架构是无效的?

贺光华
2023-03-14

为了避免在模式验证过程中出现PHP警告,可以使用libxml_use_internal_errors(true);libxml_get_errors()[0]-

libxml\u use\u internal\u错误(true) 已在返回的错误数组中捕获错误消息,该警告对我来说似乎是多余的,有没有办法绕过/禁用此特定警告?

我在严格模式下工作,所以当发出警告时停止执行,并将错误记录在数据库中,问题是PHP警告太模糊,所以我想绕过它,在单独的日志系统中报告libxml错误,然后查看详细错误。

这个警告是正确的行为吗?有可能是错误吗?

PHP代码:

<?php
    $DD = new DOMDocument('1.0', 'ISO-8859-1');
    $DD -> loadXML('<?xml version ="1.0" encoding="ISO-8859-1"?><a></a>');
    libxml_use_internal_errors(true); // NO LIBXML WARNINGS
    $DD -> schemaValidate(__DIR__ . '/schema.xsd'); // Vague WARNING
    $errors = libxml_get_errors();

    if (isset($errors[0])) {
        echo $errors[0] -> message; // Libxml detailed message
    }
?>

PHP警告:

DOMDocument::模式验证():无效的模式

libxml详细错误消息:

元素{http://www.w3.org/2001/XMLSchema}复杂类型':内容无效。预期是(注释?,(simpleContent|复杂内容|(group|all|选择|序列)?,((属性|属性组)*,anyAtcm?)))))

无效模式(schema.xsd):

<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema
    targetNamespace="http://www.lala.com/la"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:la="http://www.lala.com/la"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified"
>
    <xs:element name="foo">
        <xs:complexType>
            <xs:element ref="bar"/><!-- lacking <sequence> parent -->
        </xs:complexType>
    </xs:element>
</xs:schema>

共有1个答案

苏高远
2023-03-14

这就是我所期望的。根据文档,DOMDocument::schemaValidate基于模式验证文档。因此,如果模式本身无效,则不能使用它来验证文档。

您可以尝试在命令前面加上@-请参阅http://php.net/manual/en/language.operators.errorcontrol.php.这应该会抑制允许html" target="_blank">代码继续的警告。如果这不起作用,您可以尝试在调用DOMDocument::SchemaValate之前使用error_reporting(0)(http://php.net/manual/en/function.error-reporting.php)暂时禁用错误报告。然后,恢复调用error_reporting(0)时返回的先前设置。

 类似资料:
  • 问题内容: 我需要解析一些HTML文件,但是它们的格式不正确,PHP向其输出警告。我想以编程方式避免这种调试/警告行为。请指教。谢谢! 码: 这个: 可以禁止显示警告,但是如何以编程方式捕获这些警告? 问题答案: 您可以使用安装临时错误处理程序 用法:

  • 问题内容: 我正在使用的代码会使用该warnings库引发很多(目前对我而言)无用的警告。阅读(/扫描)文档后,我只找到了一种禁用单个功能警告的方法。但是我不想更改太多代码。 可能有像这样的标志吗? 你会推荐什么? 问题答案: 有-W选项。 python -W ignore foo.py

  • 问题内容: 我正在尝试在Pylint 0.21.1中禁用警告C0321(“在一行上有多个语句” –我经常将带有短单行结果的语句放在同一行上)(如果重要:astng 0.20)。 1,常见的0.50.3,Python 2.6.6(r266:84292,2010年9月15日,16:22:56))。 我尝试添加Pylint配置文件,但是Pylint坚持要报告它。该行的变体(如或)被标记为错误,因此Pyl

  • 我正在尝试在节点中使用Firebase。但是每次我重新启动服务器时,都会出现以下错误: FIREBASE警告:提供的身份验证凭据无效。这通常表示您的FirebasApp实例没有正确初始化。确保您的apiKey和数据库URL与https://console.firebase.google.com/为您的应用提供的值相匹配,或者如果您使用的是服务号,请确保它已被授权访问指定的数据库URL,并且来自正确

  • 在Effective Java(第二版)的第2项中,作者提到了以下关于在使用构建器时对参数施加不变量的内容: 在将参数从构建器复制到对象后,必须检查它们,并在对象字段而不是构建器字段上检查它们(项目 39)。如果违反任何不变量,则生成方法应引发非法状态异常(项 60)。 这是否意味着构建方法创建目标对象后,应该将其传递给验证例程以进行任何所需的验证? 另外,有人能解释一下这背后的原因吗?

  • 我必须向客户提供上传他自己的JSON模式的可能性。 是否有方法验证用户提供的JSON模式是有效的JSON模式,而不仅仅是数据? 我在这个库中使用Javahttps://github.com/networknt/json-schema-validator 更新: 我有以下模式: 我需要知道这是否是一个有效的JSON模式,而不是JSON数据。此处提供了一个JSON数据示例: