PHP SimpleXMLElement validation XSD
est-il possible de valider un SimpleXMLElement avec un XSD shema stockées dans une chaîne de caractères?
- Je obtenir ce xml creux CURL:
<production_feedback>
<production_number>DA1100208</production_number>
<production_status>DONE</production_status>
</production_feedback>
De mon côté, je le reçois comme ceci:
if ( $_SERVER['REQUEST_METHOD'] === 'POST' ){
$post_text = file_get_contents('php://input');
$xml = new SimpleXMLElement($post_text);
error_log(print_r($xml , true));
}
C'est dans ma error_log()
:
SimpleXMLElement Object\n(\n [production_number] => DA1100208\n [production_status] => PRODUCTION_IN_PROGRESS\n)\n
Afin que je puisse accéder aux données avec Xpath. Cela fonctionne bien. Je tiens à le valider avec un XSD. Est-il possible, ou est-il un autre moyen de 2 valider le XML de la chaîne avec la chaîne XSD?
c'est mon XSD btw stockée dans une 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>'
OriginalL'auteur Barta Tamás | 2012-09-20
Vous devez vous connecter pour publier un commentaire.
La SimpleXMLElement classe ne supporte pas que (pour autant que la documentation sur php.net est jusqu'à ce jour).
La DOMDocument fournit les fonctionnalités que vous recherchez à l'aide de la DOMDocument::schemaValidateSource méthode.
---- Original
La XMLReader classe a cependant l'setSchema méthode qui peut être utilisée pour la validation à l'encontre d'un XSD fichier (Ce n'est pas exactement ce que vous cherchiez, mais c'est ce que j'ai trouvé sans s'appuyer sur aucune des bibliothèques externes)
Oui, je le pense. (Vous pouvez simplement écrire le fichier et le supprimer par la suite, mais je ne sais pas si vous voulez le faire) Lors de l'utilisation d'un Schéma RelaxNG cependant, vous pouvez passer le schéma de la chaîne directement à la setRelaxNGSchemaSource méthode (Mais je ne sais pas Relax NG, donc je ne peux pas vous conseiller sur si c'est une bonne façon d'aller ou non).
Je viens de trouver le DOMDocument de classe qui prend en charge la validation d'un fichier XML par rapport à un schéma de chaîne à l'aide de la DOMDocument::schemaValidateSource méthode. Vous pourriez veux donner un essai à la place.
j'ai trouvé ce php.net/manual/en/xmlreader.xml.php je pense que je n'ai pas l'enregistrer, il suffit de définir une chaîne de caractères. Corrigez-moi si je suis faux.
un dernier commentaire , il fonctionne parfaitement avec DOMDocument classe, avec loadXML et schemaValidateSource. Thx.
OriginalL'auteur Louis Huppenbauer
J'ai récemment eu besoin de valider une variable contenant une chaîne de caractères XML à l'encontre d'un fichier XSD, donc si quelqu'un d'autre est à la recherche de cette solution, veuillez voir ci-dessous:
Si vous aussi vous avez votre XSD stockées dans une chaîne de caractères, puis remplacer " XSDs/FeedFile.xsd " avec le var contenant votre XSD.. j'espère que quelqu'un trouve cette pratique!
OriginalL'auteur DonMichael