2017-10-17 11 views
1

Je sais que cette question a déjà été posée, mais je n'arrive pas à la faire fonctionner. J'utilise simplexml et xpath dans un fichier PHP. J'ai besoin d'obtenir du texte d'un nœud incluant le texte dans ses nœuds enfants. Ainsi, les résultats devraient être:PHP XML: Obtention du texte d'un noeud et de ses enfants

Mr.Smith bought a white convertible car. 

Voici le xml:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="test9.xsl"?> 
<items> 
    <item> 
     <description> 
      <name>Mr.Smith bought a <car>white</car> <car>convertible</car> car.</name> 
     </description> 
    </item> 
</items> 

Le php qui ne fonctionne pas est:

$text = $xml->xpath('//items/item/description/name'); 
    foreach($text as &$value) { 
     echo $value; 
} 

S'il vous plaît aider!

+0

publier la sortie de courant – RomanPerekhrest

Répondre

0

Pour obtenir la valeur de nœud avec tous ses éléments enfants, vous pouvez utiliser DOMDocument, avec C14n():

<?php 
$xml = <<<XML 
<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="test9.xsl"?> 
<items> 
    <item> 
     <description> 
      <name>Mr.Smith bought a <car>white</car> <car>convertible</car> car.</name> 
     </description> 
    </item> 
</items> 
XML; 
$doc = new DOMDocument; 
$doc->loadXML($xml); 
$x = new DOMXpath($doc); 
$text = $x->query('//items/item/description/name'); 
echo $text[0]->C14n(); // Mr.Smith bought a white convertible car. 

Demo

+0

Ou simplement '$ text [0] -> nodeValue ; 'even' $ text [0] -> textContent; ' – Parfait

+0

@Parfait merci! Figuré, il avait aussi besoin des tags, pour une raison quelconque. – ishegg

+0

Je ne reçois rien pour une raison quelconque. L'avez-vous testé? –