PHP에서 json을 xml로 변환하는 방법이 있습니까?
변환하는 방법이 있나요?json로.xml에PHPxml 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 |