Вспомнил, что еще, кроме xpath, из современного функционала надо - проверка по xsd схеме. Например, для разных форм отчетности, которые все в xml. Через vbscript я не реализовывал, показалось, что удобнее закидывать файлик по ftp на хостинг, а следом стартовать php скрипт, передав имя файла через параметр. Скрипт возвращает список ошибок или сообщение, что их нет. На всякий случай, пример реализации на php, вдруг пригодиться.
Код: Выделить всё
<?php
// перевод символов из utf8 в win
function utf8_win($s)
{
return strtr ($s, array
("\xD0\xB0"=>"а", "\xD0\x90"=>"А", "\xD0\xB1"=>"б", "\xD0\x91"=>"Б",
"\xD0\xB2"=>"в", "\xD0\x92"=>"В", "\xD0\xB3"=>"г", "\xD0\x93"=>"Г",
"\xD0\xB4"=>"д", "\xD0\x94"=>"Д", "\xD0\xB5"=>"е", "\xD0\x95"=>"Е",
"\xD1\x91"=>"ё", "\xD0\x81"=>"Ё", "\xD0\xB6"=>"ж", "\xD0\x96"=>"Ж",
"\xD0\xB7"=>"з", "\xD0\x97"=>"З", "\xD0\xB8"=>"и", "\xD0\x98"=>"И",
"\xD0\xB9"=>"й", "\xD0\x99"=>"Й", "\xD0\xBA"=>"к", "\xD0\x9A"=>"К",
"\xD0\xBB"=>"л", "\xD0\x9B"=>"Л", "\xD0\xBC"=>"м", "\xD0\x9C"=>"М",
"\xD0\xBD"=>"н", "\xD0\x9D"=>"Н", "\xD0\xBE"=>"о", "\xD0\x9E"=>"О",
"\xD0\xBF"=>"п", "\xD0\x9F"=>"П", "\xD1\x80"=>"р", "\xD0\xA0"=>"Р",
"\xD1\x81"=>"с", "\xD0\xA1"=>"С", "\xD1\x82"=>"т", "\xD0\xA2"=>"Т",
"\xD1\x83"=>"у", "\xD0\xA3"=>"У", "\xD1\x84"=>"ф", "\xD0\xA4"=>"Ф",
"\xD1\x85"=>"х", "\xD0\xA5"=>"Х", "\xD1\x86"=>"ц", "\xD0\xA6"=>"Ц",
"\xD1\x87"=>"ч", "\xD0\xA7"=>"Ч", "\xD1\x88"=>"ш", "\xD0\xA8"=>"Ш",
"\xD1\x89"=>"щ", "\xD0\xA9"=>"Щ", "\xD1\x8A"=>"ъ", "\xD0\xAA"=>"Ъ",
"\xD1\x8B"=>"ы", "\xD0\xAB"=>"Ы", "\xD1\x8C"=>"ь", "\xD0\xAC"=>"Ь",
"\xD1\x8D"=>"э", "\xD0\xAD"=>"Э", "\xD1\x8E"=>"ю", "\xD0\xAE"=>"Ю",
"\xD1\x8F"=>"я", "\xD0\xAF"=>"Я"));
}
function libxml_display_error($error)
{
$return = "\r\n";
switch ($error->level) {
case LIBXML_ERR_WARNING:
$return .= "Предупреждение $error->code: ";
break;
case LIBXML_ERR_ERROR:
$return .= "Ошибка $error->code: ";
break;
case LIBXML_ERR_FATAL:
$return .= "Фатальная ошибка $error->code: ";
break;
}
$return .= trim($error->message);
$return .= " строка $error->line \r\n";
return $return;
}
function libxml_display_errors()
{
$errors = libxml_get_errors();
foreach ($errors as $error) {
print utf8_win(libxml_display_error($error));
}
libxml_clear_errors();
}
setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251', 'russian');
echo 'Проверка xml-файла по xsd-схеме' . "\r\n";
$reg = $_GET['reg'];
$fnamePar = $_GET['fname'];
$fname = '../../fssupport/services/' . $fnamePar;
$name_xsd = '';
switch ($reg)
{
case "1":
$name_xsd = 'fns_nds_decl2015.xsd';
break;
case "2":
$name_xsd = 'fns_nds_decl2015_pok.xsd';
break;
case "3":
$name_xsd = 'fns_nds_decl2015_prod.xsd';
break;
case "4":
$name_xsd = 'alco11.xsd';
break;
case "5":
$name_xsd = 'alco12.xsd';
break;
};
if (!file_exists($fname))
{
echo 'Не найден файл для проверки!';
}
elseif (!file_exists($name_xsd))
{
echo 'Не найдена схема для проверки!';
unlink($fname);
}
else
{
libxml_use_internal_errors(true);
$xml = new DOMDocument('1.0', 'Windows-1251');
$xml->load($fname);
if (!$xml->schemaValidate($name_xsd))
{
print "Получен список ошибок! \r\n";
libxml_display_errors();
}
else
{
echo 'Успех!';
};
unlink($fname);
};
?>
C6/C11, ШВС, tps/btrieve.