-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 回答