2010-06-28 10 views
2

En utilisant mon code ci-dessous je peux lire <abcxyz> xml facilement. mais comment puis-je lire les données entre <abc:xyz></abc:xml> balise xml .. tag XML à l'aide php.pls aider ....Comment lire < abc: xyz > tag xml en utilisant php?

mon exemple de code php ...

$objDOM->load("abc.xml"); 
    $note = $objDOM->getElementsByTagName("note"); 
    foreach($note as $value) 
    { 
    $tasks = $value->getElementsByTagName("tasks"); 
    $task = $tasks->item(0)->nodeValue; 
    $details = $value->getElementsByTagName("details"); 
    $detail = $details->item(0)->nodeValue;  
    echo "$task :: $detail<br>"; 
    } 

Mon exemple de code XML:

<mynotes> 
    <note> 
     <tasks>Task 1</tasks> 
     <details>Detail 1</details> 
    </note> 
    <abc:xyz> Cannot Read the XML data between this tag</abc:xyz> 
</mynotes> 

Pls me guide ...

Merci
Riad

+2

Quelle est la classe de $ objDOM? Peut-il faire XML Namespaces? Parce que cela ressemble à ce que «abc» est dans le contexte de la balise ... –

Répondre

2
+1

pourriez-vous me donner un exemple ... parce que sur ce lien je ne reçois aucun exemple approprié .. – riad

+1

en utilisant cet exemple je reçois le abc et xyz dans une variable séparée comme $ v1 et $ v2.Mais je ne peux pas mettre $ value-> getElementsByTagName ($ v1, $ v2); sur cette fonction pour obtenir de la valeur entre ce .. J'ai besoin de la valeur entre cette balise – riad

+0

@riad vérifier ma réponse –

7

abc:xyz signifie que l'élément est nommé xyz, et l'espace de noms est indiquée par abc. La partie de l'espace de nommage est en fait un raccourci pour un URI, qui est généralement également donné dans le fichier XML. Par exemple, vous pouvez voir ceci:

xmlns:abc="http://www.abc.com/xml"

Dans ce cas, les éléments qui ont abc avant les deux points sont dans l'espace de noms http://www.abc.com/xml.

Pour récupérer cet élément, vous devez utiliser getElementsByTagNameNS et transmettre http://www.abc.com/xml en tant qu'espace de noms.

+1

S'il vous plaît vérifiez si vous pouvez répondre à cette question http://stackoverflow.com/questions/6665222/unable-to-parse-xml -data-with-colon-de-réponse-using-getnamespaces –

1

Voulez-vous profiter de la façon DOMDocument::getElementsByTagNameNS comme d'autres l'ont suggéré, voici un code de travail (y compris la lecture du contenu intérieur), en supposant que vous avez également une déclaration d'espace de noms (comme <abc:response xmlns:abc="http://api-url">) partie comme l'a souligné @Sjoerd -

$xml = '<?xml version="1.0"?> 
     <abc:response xmlns:abc="http://api-url"> 
     <mynotes> 
      <note> 
      <tasks>Task 1</tasks> 
      <details>Detail 1</details> 
      </note> 
     <abc:xyz> Can Read the XML data between this tag!!</abc:xyz> 
     </mynotes> 
     </abc:response>'; 

$dom = new DOMDocument; 
// load the XML string defined above 
$dom->loadXML($xml); 


foreach ($dom->getElementsByTagNameNS('http://api-url', '*') as $element) 
{ 
    //echo 'see - local name: ', $element->localName, ', prefix: ', $element->prefix, "\n"; 
    if($element->localName == "xyz") 
     echo get_inner_html($element); 

} 

function get_inner_html($node) 
{ 
    $innerHTML= ''; 
    $children = $node->childNodes; 
    foreach ($children as $child) 
    { 
     $innerHTML .= $child->ownerDocument->saveXML($child); 
    } 

    return $innerHTML; 
} 

Here est un lien de travail montrant la sortie.

Notez que je viens enveloppé votre xml dans ce -

'<?xml version="1.0"?> 
     <abc:response xmlns:abc="http://api-url">' 
       .$yourxml 
     .'</abc:response>'; 

J'utilise la solution que je suis d'ici PHP DOM get nodevalue html? (without stripping tags) ... était coincé avec un problème similaire ces jours-ci.