-1

XML ドキュメントを受け入れる Web サービスを作成していますが、true または false を返すだけです。私の質問は、受信した XML を検証し、すべてのノードに値があることを確認する方法です。

たとえば、これは次のように検証されます。

<ItemUpdate>
<ItemNmbr>1234</ItemNmbr>
<ItemDesc>Part Number 1 - More info goes here</ItemDesc>
<ItemPrice>8.25</ItemPrice>
<Model>TC12B</Model>
</ItemUpdate>

しかし、このデータはそうではありません

<ItemUpdate>
<ItemNmbr></ItemNmbr>
<ItemDesc>Part Number 1 - More info goes here</ItemDesc>
<ItemPrice></ItemPrice>
<Model>TC12B</Model>
</ItemUpdate>

以下は、これまでのデータの処理方法です。不足しているものがあれば、お勧めします。

<?PHP

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

    $dataPOST = trim(file_get_contents('php://input'));
    $xmlData = simplexml_load_string($dataPOST);

    //VALIDATE $xmlData;

      if ($xmlData){
          echo true;
         }else{
          echo false;
         }

}

?>
4

2 に答える 2

3

そのための XSD スキーマを定義し、その後呼び出すだけDOMDocument::schemaValidateです。そのスキーマを最初に設定するのは少し手間がかかる場合がありますが、通常は長期的には見返りがあります。

于 2013-10-29T08:04:10.320 に答える
1

xml をロードし、各ノードを反復処理して空白かどうかを確認する必要があります。

    $doc = new DOMDocument();

    /* you can use your variable containing response from post here instead of 
     * hard coded string
     */

    $doc->loadXML('<ItemUpdate><ItemNmbr>1234</ItemNmbr><ItemDesc>Part Number 1 - More info goes here</ItemDesc><ItemPrice>8.25</ItemPrice><Model>TC12B</Model></ItemUpdate>');

    $nodeBlank = false;

    $x = $doc->documentElement;
    foreach ($x->childNodes AS $item){
        if(trim($item->nodeValue) == ''){
            $nodeBlank = true;
        }
    }

    if($nodeBlank){
        echo 'false';
    }else{
        echo 'true';
    }
于 2013-10-29T08:15:41.777 に答える