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


Validate XML data verify there are values

我正在创建一个接受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;
         }
}
?>

为它定义一个 XSD 架构,然后调用DOMDocument::schemaValidate。首先设置该架构可能有点工作,但从长远来看,它通常是值得的。

您必须加载 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';
    }