为了避免架构验证过程中的PHP警告,可以使用@echo off
(
for /f "delims=" %%a in ('
findstr /r /c:"^ *<.*> *$" "%~dpnx0"
') do (
setlocal enableDelayedExpansion
set "line=%%a"
echo !line:MYUSERNAME=%USERNAME%!
endlocal
)
)>"somefile.txt"
goto xmlEND
:::::::::: XML BLOCK, EACH LINE MUST START WITH < AND END WITH >
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<Extensibility xmlns="http://schemas.microsoft.com/AutomationExtensibility">
<HostApplication>
<Name>Microsoft SQL Server Management Studio</Name>
<Version>*</Version>
</HostApplication>
<Addin>
<FriendlyName>USAddin</FriendlyName>
<Description>Union Square Addin for SQL Management Studio</Description>
<Assembly>C:\Users\MYUSERNAME\Documents\Visual Studio 2010\Projects\USAddin\USAddin\bin\Debug\USAddin.dll</Assembly>
<FullClassName>USAddin.Connect</FullClassName>
<LoadBehavior>1</LoadBehavior>
<CommandPreload>0</CommandPreload>
<CommandLineSafe>0</CommandLineSafe>
</Addin>
</Extensibility>
:xmlEND
pause
和libxml_use_internal_errors(true);
来手动使用#34;管理最终验证错误消息。当它与模式不匹配的XML时会起作用,但当模式本身无效时仍会触发警告。
libxml_get_errors()[0] -> message;
已经在返回的错误数组中捕获了错误消息,警告对我来说似乎是多余的,绕过/禁用此特定警告的方法是什么?
我在严格模式下工作,所以当警告触发时我停止执行,并在数据库中记录错误,问题是PHP警告太模糊,所以我想绕过它来报告libxml错误一个单独的日志系统,然后看到详细的错误。
此警告是否是正确的行为?这有什么机会吗?
PHP代码:
libxml_use_internal_errors(true);
PHP警告:
DOMDocument :: schemaValidate():无效的架构
libxml详细错误消息:
元素&#39; {http://www.w3.org/2001/XMLSchema} complexType&#39;:内容 无效。预期是(注释?,(simpleContent | complexContent | ((group | all | choice | sequence)?,((属性| attributeGroup)*,anyAttribute?))))
无效架构(schema.xsd):
<?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
}
?>
答案 0 :(得分:1)
这是我期望发生的事情。根据文档,DOMDocument :: schemaValidate基于模式验证文档。因此,如果架构本身无效,则无法用于验证文档。
您可以尝试使用@前缀命令 - 参见http://php.net/manual/en/language.operators.errorcontrol.php。这应该取消警告,允许您的代码继续。如果这不起作用,您可以尝试使用error_reporting(0)(http://php.net/manual/en/function.error-reporting.php)暂时禁用错误报告,然后再调用DOMDocument :: schemaValidate。然后,恢复先前调用error_reporting(0)时返回的设置。