2012-06-22 4 views
0

Je suis en train de graver un site Web basé principalement sur des tables. J'ai <tr> étiquettes qui représentent chacune une catégorie et <td> étiquettes à l'intérieur de ceux-ci qui représentent les propriétés de la catégorie.Tableaux multidimensionnels XPath en PHP

Utilisation de XPath je reçois l'amende <tr> mais avec toutes les informations <td> à l'intérieur bunched comme une chaîne:

$html_string = file_get_contents('testpage.html'); 
$dom = new DOMDocument(); 
$dom->loadHTML($html_string); 
$xpath = new DOMXpath($dom); 
$context_nodes = $xpath->query('//table[@id="category"]/tr[not(starts-with(@id, "category"))]'); 

Et peuvent chacun se <td> bien, mais sans référence rétrospective à la catégorie avec:

$context_nodes = $xpath->query('//table[@id="category"]/tr[not(starts-with(@id, "category"))]/td'); 

Ce que je voudrais faire plus tard est de pouvoir référencer les propriétés de chaque catégorie. J'ai supposé que je pourrais le faire avec $ context_nodes [2] etc., en pensant que le tableau qu'il a créé était un tableau de chaînes multidimensionnel. Cela ne semble pas être le cas.

Comment pourrais-je créer un tableau à partir de l'information xpath où je peux récupérer une propriété d'une catégorie en fonction de l'identification de la catégorie que je veux spécifiquement. Par exemple. train [1] [2]?

Répondre

1

Votre deuxième tentative est sur la bonne ligne. PHP (ou plutôt libxml) conserve une référence au contexte dans lequel les nœuds sélectionnés ont été renvoyés, ce qui vous permet de faire exactement ce dont vous avez besoin dans votre cas.

XML

<root> 
    <cat name="category 1"> 
     <prop>prop 1.1</prop> 
     <prop>prop 1.2</prop> 
    </cat> 
    <cat name="category 2"> 
     <prop>prop 2.1</prop> 
     <prop>prop 2.2</prop> 
    </cat> 
</root> 

PHP

$xml = new SimpleXMLElement($xml); 
$props = $xml->xpath('cat/prop'); 
foreach($props as $prop) { 
    //let's go back up... 
    $parent_cat = $prop->xpath('parent::*/@name'); 
    echo '<p>'.$prop.' (property of '.$parent_cat[0].')</p>'; 
} 

Remarquez comment nous naviguons remonter l'arbre, du point du noeud prop, pour faire référence à la catégorie parente. Je ne sais pas si c'est ce que vous vouliez dire mais j'espère que ça aide.

+0

Ah, merci beaucoup. J'avais résolu cela en utilisant une méthode beaucoup plus longue, donc c'est génial de savoir qu'il y a une méthode plus simple intégrée. Merci! – biscuitstack

Questions connexes