2009-06-04 4 views
0

Ceci est une question de suivi à cette réponse:Pourquoi quand j'envoie XML à PHP, les nœuds sont-ils en minuscules, mais quand je les analyse en PHP, ils sont en majuscules?

How do I parse XML from PHP that was sent to the server as text/xml?

JavaScript/JQuery:

var xmlDoc = jQuery.createXMLDocument("<items></items>"); 
jQuery("items", xmlDoc).append(jQuery("<item>My item!</item>")); 
jQuery.ajax({ 
    url: "test.php", 
    type: "POST", 
    processData: false, 
    contentType: "text/xml", 
    data: xmlDoc, 
    success: function(data) { 
     alert(data); 
    } 
}); 

PHP:

$xml_text = file_get_contents("php://input"); 
$xml = simplexml_load_string($xml_text); 
echo $xml->ITEM; 

Pour cela je travaille dois utilisez $ xml-> ITEM. Si j'utilise $ xml-> item cela ne marchera pas. Je me demandais pourquoi, lorsque le nœud d'élément est ajouté, il est minuscule, mais quand je le récupère, il doit maintenant être en majuscules? Je voudrais qu'il soit en minuscule dans mon PHP. Merci.

+0

Utilisez-vous http://plugins.jquery.com/project/createXMLDocument? Et avec quels navigateurs l'avez-vous testé? – VolkerK

+0

Oui, je le suis. Juste Firefox pour le moment. –

Répondre

4

Votre script PHP reçoit <articles> <ARTICLE> Mon article! </ARTICLE > </articles > en entrée. Essayez

<?php 
$xml_text = file_get_contents("php://input"); 
file_put_contents('test.log.txt', $xml_text);
si vous pensez que ce n'est pas le cas.

xmlDoc est un document XML, mais le résultat de jQuery ("<article> Mon article! </article >") n'est pas. En cours de route, jQuery utilise .nodeName qui se comporte comme .tagName pour les éléments.
https://developer.mozilla.org/en/DOM/element.tagName indique:

En XML (et les langages basés sur XML tels que XHTML), tagName conserve la casse. En HTML, tagName renvoie le nom de l'élément dans la forme majuscule canonique. La valeur de tagName est la même que celle de nodeName.

+0

Grande Explication +1 – ichiban

+0

Donc, je suppose que la question demeure, comment puis-je obtenir mon PHP pour faire une recherche insensible à la casse sur le nœud ITEM lui-même? J'ai recherché une solution XPath ou une solution SimpleXML et je n'en trouve aucune. –

+0

Vous n'avez pas besoin de faire une recherche insensible à la casse. Ce sera toujours en majuscules. Si vous recherchez un nom de noeud arbitraire, transposez-le en majuscules à l'aide de strtoupper(). – defines

Questions connexes