Действительно ли возможно проверить XML против нескольких схем в PHP?

Я задаюсь вопросом, возможно ли проверить xml против нескольких схем в PHP, или я должен объединить свои схемы так или иначе.

Спасибо за ответ!

5
задан Martin Vseticka 30 April 2010 в 16:19
поделиться

2 ответа

Я решил свою проблему с помощью простого PHP-скрипта:

$mainSchemaFile = dirname(__FILE__) . "/main-schema.xml";
$additionalSchemaFile = 'second-schema.xml';


$additionalSchema = simplexml_load_file($additionalSchemaFile);
$additionalSchema->registerXPathNamespace("xs", "http://www.w3.org/2001/XMLSchema");
$nodes = $additionalSchema->xpath('/xs:schema/*');    

$xml = '';  
foreach ($nodes as $child) {
  $xml .= $child->asXML() . "\n";
}

$result = str_replace("</xs:schema>", $xml . "</xs:schema>", file_get_contents($mainSchemaFile));

var_dump($result); // merged schema in form XML (string)

Но это возможно только благодаря тому, что схемы одинаковы - то есть

<xs:schema xmlns="NAMESPACE"
           targetNamespace="NAMESPACE"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">

находится в обоих файлах.

1
ответ дан 14 December 2019 в 19:06
поделиться

Учитывая, что метод DOMDocument :: schemaValidate получает путь к файлу схемы в качестве параметра, я бы сказал, что вам просто нужно вызвать этот метод несколько раз: один раз для каждой из ваших схем .

См. Также DOMDocument :: schemaValidateSource , если у вас есть схемы в строках PHP; идея (и ответ) будут такими же: просто вызовите метод несколько раз.

-1
ответ дан 14 December 2019 в 19:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: