【问题标题】:Validate XML data verify there are values [duplicate]验证 XML 数据验证是否存在值 [重复]
【发布时间】:2013-10-29 07:49:49
【问题描述】:

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

}

?>

【问题讨论】:

    标签: php xml validation


    【解决方案1】:

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

    【讨论】:

    • 架构可以成为当前脚本的一部分吗?还是必须在另一个文件中?谢谢你提供的详情。 +1
    • 如果您想将其用作嵌入文件中的字符串,您可以使用DOMDocument::schemaValidateSource。但是,我会发现单独保存该 .xsd 架构更方便,以便将来的其他代码可以轻松使用它。
    【解决方案2】:

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

    【讨论】:

    • 这就是我的想法,我只是不确定如何迭代数据。谢谢你的帮助。 +1
    • 我不会将它用于 XML。我会使用 Wrikkens 的方式来处理模式验证。
    猜你喜欢
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 2021-01-24
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    相关资源
    最近更新 更多