2010-09-02 5 views
1

Considérez le code suivant:XML avec l'analyse d'un Xpath en PHP

$dom = new DOMDocument(); 
$dom->loadXML($file); 

$xmlPath = new DOMXPath($dom); 
$arrNodes = $xmlPath->query('*/item'); 
foreach($arrNodes as $item){ 
//missing code 
} 

Le fichier $ est un xml et chaque élément a un titre et une description. Comment puis-je les afficher (titre et description)?

$file = "<item> 
    <title>test_title</title> 
    <desc>test</desc> 
</item>"; 

Répondre

2

Si votre article ressemble à ceci:

<item> 
    <title>foo</title> 
    <description>frob</description>  
</item> 

Vous pouvez utiliser getElementsByTagName() et nodeValue:

foreach($arrNodes as $item){ 
    print $item->getElementsByTagName('title')->item(0)->nodeValue; 
} 

Sont title et description attributs? Par exemple. ne un article ressemble à ceci:

<item title="foo" description="frob" /> 

Si oui, vous pouvez simplement utiliser getAttribute():

... 
foreach($arrNodes as $item){ 
    print $item->getAttribute('title'); 
} 
+0

Ce sont des nœuds. – danidacar

6

Je suggère d'utiliser php de simplexml, avec cela, vous obtenez toujours xpath fonctionnalité, mais avec l'approche plus facile, par exemple, vous accéder à des attributs comme ceci:

$name = $item['name']; 

Voici un exemple:

xmlfile.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<xml> 
    <items> 
     <item title="Hello World" description="Hellowing the world.." /> 
     <item title="Hello People" description="greeting people.." /> 
    </items> 
</xml> 

do.p HP:

<?php 
$xml_str = file_get_contents('xmlfile.xml'); 
$xml = new SimpleXMLElement($xml_str); 
$items = $xml->xpath('*/item'); 

foreach($items as $item) { 
    echo $item['title'], ': ', $item['description'], "\n"; 
} 
+0

Ok, mais xpath est-il limité? – danidacar

+0

J'ai édité en ajoutant un exemple si vous voulez vérifier et tester. – aularon

+0

@daniphp, comment voulez-vous dire, vous posez des questions sur les capacités de requête xpath en général ou sur les limitations de simplexml? – aularon

0

Le droit d'expression XPath doit être:

/*/item/title | /*/item/desc 

Ou

/*/item/*[self::title or self::desc] 

Ceci est évalué te à un nœud défini avec title et desc élément dans l'ordre des documents