IT

PHP에서 json을 xml로 변환하는 방법이 있습니까?

itgroup 2023. 3. 29. 21:24
반응형

PHP에서 json을 xml로 변환하는 방법이 있습니까?

변환하는 방법이 있나요?json로.xmlPHPxml to json이 매우 가능하다는 것을 알고 있습니다.

PEAR에서 XML Serializer를 사용하는 경우 JSON을 PHP 개체로 변환하고 PHP 개체를 XML로 변환할 수 있습니다.

include("XML/Serializer.php");

function json_to_xml($json) {
    $serializer = new XML_Serializer();
    $obj = json_decode($json);

    if ($serializer->serialize($obj)) {
        return $serializer->getSerializedData();
    }
    else {
        return null;
    }
}

XML의 정확한 모양에 따라 달라집니다. 를 조합하여 사용해 보겠습니다(자세한 내용과 예는 sitepoint.com 를 참조해 주세요.

require_once 'XML/Serializer.php';

$data = json_decode($json, true)

// An array of serializer options
$serializer_options = array (
  'addDecl' => TRUE,
  'encoding' => 'ISO-8859-1',
  'indent' => '  ',
  'rootName' => 'json',
  'mode' => 'simplexml'
); 

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) die($status->getMessage());

echo '<pre>';
echo htmlspecialchars($Serializer->getSerializedData());
echo '</pre>';

(테스트되지 않은 코드 - 하지만 이해하실 수 있습니다)

다음 방법으로 JSON을 엽니다.json_decode원하는 XML을 생성할 수 있습니다.

JSON과 XML 사이에는 표준 매핑이 없으므로 애플리케이션의 필요에 따라 XML 생성 코드를 직접 작성해야 합니다.

저는 앞서 제시한 두 가지 제안을 다음과 같이 통합했습니다.

/**
 * Convert JSON to XML
 * @param string    - json
 * @return string   - XML
 */
function json_to_xml($json)
{
    include_once("XML/Serializer.php");

    $options = array (
      'addDecl' => TRUE,
      'encoding' => 'UTF-8',
      'indent' => '  ',
      'rootName' => 'json',
      'mode' => 'simplexml'
    );

    $serializer = new XML_Serializer($options);
    $obj = json_decode($json);
    if ($serializer->serialize($obj)) {
        return $serializer->getSerializedData();
    } else {
        return null;
    }
}

네이티브 어프로치는

function json_to_xml($obj){
  $str = "";
  if(is_null($obj))
    return "<null/>";
  elseif(is_array($obj)) {
      //a list is a hash with 'simple' incremental keys
    $is_list = array_keys($obj) == array_keys(array_values($obj));
    if(!$is_list) {
      $str.= "<hash>";
      foreach($obj as $k=>$v)
        $str.="<item key=\"$k\">".json_to_xml($v)."</item>".CRLF;
      $str .= "</hash>";
    } else {
      $str.= "<list>";
      foreach($obj as $v)
        $str.="<item>".json_to_xml($v)."</item>".CRLF;
      $str .= "</list>";
    }
    return $str;
  } elseif(is_string($obj)) {
    return htmlspecialchars($obj) != $obj ? "<![CDATA[$obj]]>" : $obj;
  } elseif(is_scalar($obj))
    return $obj;
  else
    throw new Exception("Unsupported type $obj");
}

다른 옵션은 JSON 스트리밍 파서를 사용하는 것입니다.

스트리머 파서를 사용하는 것은 PHP에 의해 작성된 중간 객체 그래프를 바이패스하고 싶을 때 편리합니다.json_decode예를 들어 대용량 JSON 문서가 있고 메모리가 문제가 될 경우 스트리밍 파서를 사용하여 문서를 읽으면서 XML을 직접 출력할 수 있습니다.

예를 들어 https://github.com/salsify/jsonstreamingparser 입니다.

$writer = new XMLWriter;
$xml->openURI('file.xml');
$listener = new JSON2XML($writer); // you need to write the JSON2XML listener
$stream = fopen('doc.json', 'r');
try {
    $parser = new JsonStreamingParser_Parser($stream, $listener);
    $parser->parse();
} catch (Exception $e) {
    fclose($stream);
    throw $e;
}

JSON2XML Listener는 Listener 인터페이스를 구현해야 합니다.

interface JsonStreamingParser_Listener 
{
  public function start_document();
  public function end_document();
  public function start_object();
  public function end_object();
  public function start_array();
  public function end_array();
  public function key($key);
  public function value($value);
}

런타임에 리스너는 파서로부터 다양한 이벤트를 수신합니다.예를 들어 파서가 오브젝트를 발견하면 데이터를start_object()방법.어레이를 찾으면 트리거합니다.start_array()기타 등등.그런 다음 이러한 방법으로 값을 적절한 방법으로 위임합니다.XMLWriter예를 들어, 등입니다.

면책사항:저는 저자와 관련이 없고, 도구를 사용해 본 적도 없습니다.이벤트 기반의 JSON 파서를 사용하는 방법을 설명하기에 API가 충분히 단순해 보여서 이 라이브러리를 선택했습니다.

언급URL : https://stackoverflow.com/questions/856833/is-there-any-way-to-convert-json-to-xml-in-php

반응형