2013-02-27 46 views
-1

我正在使用这个XML to Json Zend模块。如何测试XML字符串是否对Zend/IBM Developerworks XML to Json有效?

问题是我可以从我连接的webservice收到一个错误的格式化XML字符串。 当这个XML在fromXml Zend方法中处理时,它会引发警告。

所以我想验证XML,然后从XML函数调用。如何知道XML是否有效?优先使用Zend?

我尝试使用的代码如下,但是我却没有sucess:(使用fromXml当这个XML字符串作品)

<?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>"; 
+0

通过验证你的意思是标签匹配,并且有一个根元素或xsd模式验证? – 2013-02-27 19:41:26

+0

我想要的唯一的事情是,当我尝试将XML字符串转换为Json时,如果XML无效,我得到一个空的json。 – GarouDan 2013-02-27 19:44:31

+0

@GarouDan:所以你想要做的就是捕获错误,所以如果出现错误,你知道XML无效?! – hakre 2013-02-28 13:31:47

回答

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

为了只是测试一个字符串是否是可解析为XML,请尝试:

simplexml_load_string(($string) 

simplexml_load_string返回假如果不是,则返回false,如果它的所有对象都正常。

+2

loadXML方法上的这些标志也将启用DTD验证和报告: LIBXML_DTDLOAD | LIBXML_DTDVALID | LIBXML_ERR_WARNING | LIBXML_DTDATTR); – 2013-02-27 19:50:09

+0

这不适用于我的有效XML。 (我可以使用上面的方法将其转换为Json的XML)。我尝试使用print_r($ dom-> loadXML($ xml_string,LIBXML_DTDLOAD | LIBXML_DTDVALID | LIBXML_ERR_WARNING | LIBXML_DTDATTR));看看是否有错,但没有出现。我能做什么? – GarouDan 2013-02-27 20:06:18

+0

试过print_r($ dom-> validate());在$ dom-> loadXML($ xml_string,LIBXML_DTDLOAD | LIBXML_DTDVALID | LIBXML_ERR_WARNING | LIBXML_DTDATTR)之后;但没有任何反应。 – GarouDan 2013-02-27 20:08:23