如何测试XML字符串是否对Zend/IBM Developerworks XML到Json有效?

Gar*_*Dan -1 php xml zend-framework zend-framework2

我正在使用这个XML到Json Zend模块.

问题是我可以从我连接的Web服务中收到格式错误的XML字符串.在fromXml Zend方法处理此XML时,它会抛出警告.

所以我想在调用fromXml函数之前验证XML .我怎么知道XML是否有效?优先使用Zend?

我尝试使用如下代码,但我还没有成功:(这个XML字符串在使用fromXml时有效)

<?php
$xml1 = 'asdf';
$xml2 = '<?xml version="1.0" encoding="iso-8859-1" ?>
<sroxml>
   <version>1.0</version>
   <quantity>1</quantity>
   <SearchType>Objetcs List</SearchType>
   <ResultType>All events</ResultType>
     <object>
       <number>AA299100299BB</number>
       <event>
          <type>BDI</type>
          <status>01</status>
          <date>07/01/2013</date>
          <hour>12:12</hour>
          <description>Received</description>
          <receiver>MARY WILLIAN                                      </receiver>
          <document>AA. 111639676            </document>
          <comment>                         </comment>
          <local>Some local</local>
          <code>11151970</code>
          <city>Some City</city>
          <uf>AB</uf>
          <sto>11102272</sto>
      </event>
     </object>
</sroxml>';

$validator = new DOMDocument();
$validator->loadXML($xml2, LIBXML_DTDLOAD|LIBXML_DTDVALID|LIBXML_ERR_WARNING |LIBXML_DTDATTR);
echo "<br>testing<pre>"; var_dump($validator->validate()); echo "</pre><br>";
Run Code Online (Sandbox Code Playgroud)

mka*_*man 5

$dom = new DOMDocument();
$dom->loadXML($xml_string);
if ($dom->validate()) {
    echo "This document is valid!\n";
}
Run Code Online (Sandbox Code Playgroud)

要测试字符串是否可以解析为XML,请尝试:

simplexml_load_string(($string)
Run Code Online (Sandbox Code Playgroud)

如果没有,simplexml_load_string返回false,如果一切正常,则返回一个对象.

  • loadXML方法上的这些标志也将启用DTD验证和报告:LIBXML_DTDLOAD | LIBXML_DTDVALID | LIBXML_ERR_WARNING | LIBXML_DTDATTR); (2认同)