2010-01-16 15 views
6

Şöyle basit bir xml dosyası vardır: Aşağıdaki perl programı ile türlerin isimlerini okumaya çalışıyorumPerl'in senaryosundaki bu findnodes ifadesinde ne var?

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<microplateDoc xmlns="http://moleculardevices.com/microplateML"> 
<camelids> 
    <species name="Camelus bactrianus"> 
    <common-name>Bactrian Camel</common-name> 
    <physical-characteristics> 
     <mass>450 to 500 kg.</mass> 
     <appearance> 
    Blah blah blah 
    </appearance> 
    </physical-characteristics> 
    </species> 
    </camelids> 
</microplateDoc> 

:

use XML::LibXML; 

my $parser = XML::LibXML->new(); 
my $doc = $parser->parse_file('/Users/johncumbers/Documents/7_Scripts/Perl/XML_to_MySQL/simplified_camelids.xml'); 
my $xc = XML::LibXML::XPathContext->new($doc->documentElement() ); 
$xc->registerNs('ns', 'http://moleculardevices.com/microplateML'); 

#loop through to find species nodes 
my @n = $xc->findnodes('*/species'); #was */species 
foreach $nod (@n) { 
    print "A: ".$nod->getAttribute("name")."\n"; 
    my @c = $nod->findnodes('./common-name'); 
    } 

Ama olsun herhangi bulmak için başarısız am düğümler. Bana neden yardım etmediğini ve bana yardım ettiğini söyleyebilir misin? Perl fonksiyonlarını aramak için en iyi web sitesi hangisiydi ki, bunu kendim çekmeye çalışıyorum. Şu anki çıktı sadece bir şey olmadığından, bana ne yaptığını söylemek için senaryoyu nasıl alabilirim. Çok teşekkürler.

cevap

5

Bir ad alanı ön ekini belge ile ilişkilendirdiniz, ancak XPath sözdizimi kullanmıyor. İşi yapmalıdır .

Önek olmadan eşleşmeyeceksiniz. Ayrıca */species yolu yalnızca geçerli bağlamdaki (yani belgenin en üst düzeyindeki) çocuklarla eşleşecektir. //species'u kullanarak, belgedeki tüm species öğelerini bulacaksınız. ki (eleman Eşleşmesini istemiyoruz belgede başka bir bağlamda görünür çünkü) sizin için çalışacak eleman olarak

/*/*/ns:species 

kullanmıyorsa üst düzeyde bir 'büyük bir torun' dir. Bir başka XPath referansı.

+1

/ns: microplateDoc/ns: camelids/ns: türler çok sıkı çalışırdı ... –