PHP:XML到JSON失败(PHP: XML to JSON fails)

2019-10-30 12:23发布

当我尝试转换XML(simplexml的),以用JSON json_encode,它适用于XML没有namesapce。 例如:

<ebpacket> 
   <head> 
      <packettype> UserAuthorization</packettype>
      <staffcode> UserName  </staffcode> 
      <pwd>  Password  </pwd> 
      <env>  Evnironment  </env> 
   </head> 
</ebpacket>

当我转换XML像下面的属性,json_encode返回一个空的JSON:

<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/>
 <soapenv:Header />
 <soapenv:Body>
  <ser:processTrans>
     <xmlValue>
            <ebpacket> 
                <head> 
                    <packettype> UserAuthorization</packettype>
                    <staffcode> UserName  </staffcode> 
                    <pwd> Password  </pwd> 
                    <env>  Evnironment  </env> 
                </head> 
            </ebpacket>
    </xmlValue>
  </ser:processTrans>

我使用的代码块:

        $xml_str = str_replace(PHP_EOL, '', $xmlstr);
        $xml = simplexml_load_string($xml_str,'SimpleXMLElement',LIBXML_NOCDATA);
        $json_object = json_encode($xml, JSON_PRETTY_PRINT);

Answer 1:

通读之后,我想通了,你必须注册你的命名空间命名空间前缀来访问节点。 例如:

$xml= SimpleXML_Load_String($xml_str,'SimpleXMLElement', LIBXML_NOCDATA, "http://schemas.xmlsoap.org/soap/envelope/");

这将返回XML对象只有头部和身体。 它会返回与其他前缀的任何节点。 在上面的例子中,它不会前缀“辑”下返回节点。 返回的XML会;

<Header></Header>
<Body></Body>

为了能够访问其他节点上,您必须使用注册了命名空间和查询。

$xml->registerXPathNamespace('ser', 'http://w3c.soap.envelope.org/');
$result = $xml->xpath('//ser:*');

$结果将与下节点的所有属性“的阵列SER:processTrans”。



文章来源: PHP: XML to JSON fails