Reputation: 899
is it possible to validate a SimpleXMLElement with an XSD shema stored in a string?
I get this xml trough CURL:
<production_feedback>
<production_number>DA1100208</production_number>
<production_status>DONE</production_status>
</production_feedback>
On my side i get it like this:
if ( $_SERVER['REQUEST_METHOD'] === 'POST' ){
$post_text = file_get_contents('php://input');
$xml = new SimpleXMLElement($post_text);
error_log(print_r($xml , true));
}
This is in my error_log()
:
SimpleXMLElement Object\n(\n [production_number] => DA1100208\n [production_status] => PRODUCTION_IN_PROGRESS\n)\n
So i can access the data with Xpath. This works well. I would like to validate it with an XSD. Is it possible, or is there any other way 2 validate the XML string with the XSD string?
this is my XSD btw stored in a variable:
$production_XSD ='<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="production_feedback">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="production_number"/>
<xs:element type="xs:string" name="production_status"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>'
Upvotes: 5
Views: 15367
Reputation: 1
I recently needed to validate a var containing an XML string against an XSD file, so if anyone else is looking for this solution, please see below:
// $xml_feed is a string containing your XML content
// validate xml string with xsd file
$doc = new DOMDocument();
$doc->loadXML($xml_feed); // load xml
$is_valid_xml = $doc->schemaValidate('XSDs/FeedFile.xsd'); // path to xsd file
if (!$is_valid_xml){
echo '<b>Invalid XML:</b> validation failed<br>';
}else{
echo '<b>Valid XML:</b> validation passed<br>';
}
If you also have your XSD stored in a string, then replace 'XSDs/FeedFile.xsd' with the var containing your XSD.. hope someone finds this helpful!
Upvotes: 0
Reputation: 3714
The SimpleXMLElement class doesn't support that (as far as the documentation on php.net is up to date).
The DOMDocument provides the functionality you're looking for using the DOMDocument::schemaValidateSource method.
---- Original
The XMLReader class however has the setSchema method which can be used for validation against a XSD file (It's not exactly what you were looking for, but that's what I found without relying on any external libraries)
Upvotes: 5