У меня есть xml с именем sample.xml
<?xml version="1.0"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
и sample.xsd для проверки sample.xml
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Я пытаюсь проверить sample.xml через мой php-код, и поскольку в sample.xml нет пространств имен, я добавляю пространство имен из кода php.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
$file = 'sample.xml';
$schema = 'sample.xsd';
$doc = new DOMDocument();
$doc->load($file);
$doc->createAttributeNS('http://www.w3schools.com', 'xmlns');
$doc->createAttributeNS('http://www.w3.org/2001/XMLSchema-instance', 'xmlns:xsi');
$doc->createAttributeNS('http://www.w3schools.com sample.xsd', 'xsi:schemaLocation');
print $doc->saveXML();
if ($doc->schemaValidate($schema)) {
print "$file is valid.\n";
} else {
print "$file is invalid.\n";
}
?>
и когда я запускаю код, я получаю следующую ошибку
Неустранимая ошибка: необработанное исключение «DOMException» с сообщением «Пространство имен
Ошибка »в /var/www/xsd/test_sample.php:20 трассировке стека: # 0
/var/www/xsd/test_sample.php(20):
DOMDocument-> createAttributeNS ('http://www.w3.o. ..', 'xmlns: xsi') # 1
{main} добавляется в /var/www/xsd/test_sample.php в строку 20
если я закомментирую строку $doc->createAttributeNS('http://www.w3.org/2001/XMLSchema-instance', 'xmlns:xsi');
код будет работать нормально, но тогда я не смогу проверить xml, как говорится sample.xml is invalid
Может кто-нибудь помочь мне с этим кодом?