PHP에서 json을 xml로 변환하는 방법이 있습니까?
변환하는 방법이 있나요?json
로.xml
에PHP
xml 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
'IT' 카테고리의 다른 글
Angular JS에서 HTML 엔티티 디코딩 (0) | 2023.03.29 |
---|---|
ASP.NET MVC 2 - jquery ajax 응답으로 실패했습니다. (0) | 2023.03.29 |
Gson용 커스텀 JSON 디시리얼라이저를 작성하려면 어떻게 해야 하나요? (0) | 2023.03.29 |
스프링 부트 @autowired가 작동하지 않습니다.클래스는 다른 패키지로 되어 있습니다. (0) | 2023.03.29 |
Greasemonkey 스크립트에서 XMLHttpRequests를 대행 수신하려면 어떻게 해야 합니까? (0) | 2023.03.29 |