5

文字列に格納された XSD スキーマを使用して SimpleXMLElement を検証することは可能ですか?

私はこのxmlトラフCURLを取得します:

<production_feedback>
        <production_number>DA1100208</production_number>
    <production_status>DONE</production_status>
</production_feedback>

私の側では、次のように取得します。

if ( $_SERVER['REQUEST_METHOD'] === 'POST' ){

    $post_text = file_get_contents('php://input');

    $xml = new SimpleXMLElement($post_text);

    error_log(print_r($xml , true));
    }

これは私の中にありますerror_log()

SimpleXMLElement Object\n(\n    [production_number] => DA1100208\n    [production_status] => PRODUCTION_IN_PROGRESS\n)\n

だから私はXpathでデータにアクセスできます。これはうまくいきます。XSDで検証したいと思います。それは可能ですか、またはXSD文字列でXML文字列を検証する他の方法はありますか?

これは、変数に格納されている私の XSD です。

$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>'
4

2 に答える 2

5

SimpleXMLElement クラスはそれをサポートしていません (php.net のドキュメントが最新である限り)。

DOMDocumentは、DOMDocument::schemaValidateSource メソッドを使用して探している機能を提供します。

- - オリジナル

ただし、XMLReaderクラスには、XSDファイルに対する検証に使用できる setSchema メソッドがあります(これはまさにあなたが探していたものではありませんが、外部ライブラリに依存せずに見つけたものです)。

于 2012-09-20T06:59:11.783 に答える