验证XML数据验证是否存在值

时间:2013-10-29 07:49:50

标签: php xml validation

我正在创建一个接受XML文档的Web服务,我所要做的就是发送回真或假。 我的问题如何验证我收到的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;
         }

}

?>

2 个答案:

答案 0 :(得分:3)

为其定义XSD架构,然后在此之后调用DOMDocument::schemaValidate。首先设置该模式可能有点工作,但从长远来看通常会付出代价。

答案 1 :(得分: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';
    }