XMLReader, DOM, XPath kullanarak belirli bir düğüm etiket adını ve değerini almak

2 Cevap php

Ben bir xml belgesi sorgulamak gerekir ve daha sonra belirli etiket değerleri görüntüler, örneğin önadlardan, soyadı, grup (borç), job_title.

I büyük XML dosyaları ile çalışmak gerekebilir gibi XMLReader kullanıyorum. Ben verileri filtrelemek için DOMXPath kullanarak, ama ben her öğe için nodeName ve değerini almak için nasıl bilmiyorum. Düğüm adı olarak sadece döndürüyor 'üyesi' Aşağıdaki kodu?

Herhangi bir yardım mutluluk duyacağız.

<?php
    $reader = new XMLReader();
    $reader->open('include/staff.xml');

    while ($reader->read()){
        switch($reader->nodeType){
            case(XMLREADER::ELEMENT):
                if($reader->localName === 'staff'){
                    $node = $reader->expand();
                    $dom = new DomDocument();
                    $dom->formatOutput = true;
                    $n = $dom->importNode($node, true);
                    $dom->appendChild($n);
                    $xp = new DomXpath($dom);
                    $res = $xp->query("/staff/member[groups='HR']");
                }
        }
    }
    echo $res->item(0)->nodeName;
    echo $res->item(0)->nodeValue;
?>

2 Cevap

Hala biraz kaba, ama bu ben peşindeyim budur. Benim XPath sorgusu soruna neden olduğunu anladım.

<?php
$reader = new XMLReader();
$reader->open('include/staff.xml');
$keywords = '';
$query = "//member[groups='Research'][contains(translate(forename,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') ,'$keywords') or contains(translate(surname,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'), '$keywords')]/*";
while ($reader->read()){
    switch($reader->nodeType){
        case(XMLREADER::ELEMENT):
            if($reader->localName === 'staff'){
                $node = $reader->expand();
                $dom = new DomDocument();
                $dom->formatOutput = true;
                $n = $dom->importNode($node, true);
                $dom->appendChild($n);
                $xp = new DomXpath($dom);
                $results = $xp->query($query);
            }
    }
}
$member = array();
$staff = array();
echo $results->length;
for($i=1; $i<$results->length; $i++){
    if($results->item($i)->nodeName !== 'id'){
        $member[$results->item($i)->nodeName] = $results->item($i)->nodeValue;
    }else{
        array_push($staff, $member);
    }
}
array_push($staff, $member);
var_dump($staff);

>

Denemek

$reader->name

ve

$reader->value

They supposed to be "The qualified name of the node" ve "The text value of the node" according to this page http://www.php-editors.com/php_manual/ref.xmlreader.html

Görünüşe göre bu insanlar bunu kullanarak nasıl bulunuyor: http://www.google.com/codesearch/p?hl=pl#_rn0kgFhkQA/redir/docvert/60463/url_tgz/docvert-3.2.3.tar.gz%7CP-uLGAoGHyM/docvert/core/process/ParseOpenDocument.php&q=xmlreader%20file:%5C.php $

Kullanım Belki daha fazla örnekleri burada bulunabilir: http://www.google.com/codesearch?q=xmlreader+file:. Php $