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