est-il un moyen de convertir json en XML en PHP? Je sais que XML à JSON est très possible.Existe-t-il un moyen de convertir json en XML en PHP?
Répondre
Cela dépend de la façon dont vous voulez que votre XML ressemble exactement. Je voudrais essayer une combinaison de json_decode()
et le PEAR::XML_Serializer
(more info and examples on 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>';
(code non testé - mais vous voyez l'idée)
Ack, vous me battre par une demi-minute.Je vais laisser le mien de toute façon - c'est une approche légèrement différente. –
Si vous êtes prêt à utiliser le XML Serializer de PEAR, vous pouvez convertir le JSON à un objet PHP puis l'objet PHP XML deux étapes faciles:
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;
}
}
Crack ouvrir le JSON avec json_decode
, et parcourir pour générer tout XML que vous voulez. Dans le cas où vous vous poseriez la question, il n'y a pas de correspondance canonique entre JSON et XML, vous devez donc écrire le code de génération XML vous-même, en fonction des besoins de votre application.
je combine les deux suggestions précédentes dans:
/**
* 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;
}
}
Parfait pour moi Cheers – wired00
Une approch native peut être
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");
}
Beau script, merci. – Zsolti
Une autre option serait d'utiliser un JSON streaming parser. L'utilisation d'un analyseur de flux est pratique si vous souhaitez ignorer le graphique d'objet intermédiaire créé par PHP lors de l'utilisation de json_decode
. Par exemple, lorsque vous avez un grand document JSON et que la mémoire est un problème, vous pouvez sortir le XML avec XMLWriter
directement lors de la lecture du document avec l'analyseur de flux.
Un exemple serait 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;
}
Le JSON2XML Listener aurait besoin de mettre en œuvre le Listener interface:
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);
}
Lors de l'exécution, l'auditeur recevra les différents événements de l'analyseur, par exemple Lorsque l'analyseur trouve un objet, il envoie les données à la méthode start_object()
. Quand il trouve un tableau, il déclenchera start_array()
et ainsi de suite. Dans ces méthodes, vous devez ensuite déléguer les valeurs aux méthodes appropriées dans XMLWriter
, par ex. start_element()
et ainsi de suite.
Clause de non-responsabilité: Je ne suis pas affilié à l'auteur, et je n'ai jamais utilisé l'outil auparavant. J'ai choisi cette bibliothèque parce que l'API semblait suffisamment simple pour illustrer comment utiliser un analyseur JSON basé sur un événement.
- 1. convertir PHP (JSON) en code ASP
- 2. convertir un tableau associatif en XML dans php
- 3. Convertir les superposition de JavaScript en JSON?
- 4. Convertir un fichier XML en DBF
- 5. Existe-t-il un moyen de convertir un PDF en HTML/CSS en utilisant PHP?
- 6. convertir xml en table
- 7. est-il un moyen simple de convertir mon objet XML en String en java?
- 8. Comment puis-je convertir Xml en JSON et vice versa en C#
- 9. Conversion de XML-RPC en JSON en JavaScript
- 10. Tri JSON Sortie en PHP
- 11. Tri JSON Array en PHP
- 12. Construct chaînes PHP en temps de XML
- 13. Convertir XML en texte brut
- 14. Analyser un document XML situé sur Internet et convertir en json
- 15. Convertir xml en xsd en utilisant java
- 16. Convertir un objet en une chaîne en PHP
- 17. Convertir un nœud DOM ou Document en XML en JavaScript
- 18. Comment convertir un tableau bidimensionnel C# en objet JSON?
- 19. Accès JSON nom de l'objet en PHP
- 20. objet Convertir en entier en PHP
- 21. Comment convertir UTF-8 texte en format JSON
- 22. Convertir .doc en html en php
- 23. Existe-t-il un moyen plus élégant de convertir un document XML en chaîne en Java que ce code?
- 24. Existe-t-il un moyen de convertir System.Windows.Forms.HtmlElement en mshtml.IHTMLElemenet3?
- 25. JSON.Net: Convertir chaîne JSON de chaîne XML à l'instance numéro
- 26. Comment convertir un fichier XML en classe .Net?
- 27. Comment convertir un fichier XML en base de données?
- 28. jquery, json et xml
- 29. Existe-t-il un moyen de convertir un IEnumerable en une collection de XElements?
- 30. Meilleur moyen d'afficher des données via JSON en utilisant jQuery
Et encore plus important: Pourquoi voudriez-vous jamais faire cela? – NikiC
'$ xml =" ";' (Poser une question idiote ...) –
salathe
Le Zend Framework a un très bon fonctionnement [component] (http://framework.zend.com /manual/en/zend.json.xml2json.html) pour cela. – markus