2012-06-01 59 views
2

XML:XPath表達式返回使用XML空節點列表::的libxml :: XPathContext - > findnodes()

<zoo xmlns="http://www.zoo.com" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:schemaLocation="http://www.zoo.com animali.xsd"> 

<area id="1" posizione="nord" nome="scimmie"> 
    <animale> 
     <nome>Gigi</nome> 
     <sesso>Male</sesso> 
     <eta>3</eta> 
     <img>../images/Gigi.png</img> 
    </animale> 

    <animale> 
     <nome>Gigia</nome> 
     <sesso>Female</sesso> 
     <eta>2</eta> 
     <img>../images/Gigia.png</img> 
    </animale> 
</area> 

<area id="2" posizione="nord" nome="giraffe"> 
    <animale> 
     <nome>Giro</nome> 
     <sesso>Male</sesso> 
     <eta>6</eta> 
     <img>../images/Giro.png</img> 
    </animale> 
</area> 
<area id="3" posizione="D8" nome="Cammelli"/> 
</zoo> 

代碼:

my $parser = XML::LibXML->new; 
my $doc = $parser->parse_file("../xml/animals.xml"); 
my $root = $doc->getDocumentElement(); 
my $xpc = XML::LibXML::XPathContext->new; 
$xpc->registerNs('zoo', 'http://www.zoo.com'); 
my $xpath_exp = "//zoo:animale[nome='".$name."']"; #also tried with "Gigi" instead of $name 
my $size = $xpc -> findnodes($xpath_exp, $doc)->size(); 

這些XML和代碼,我總是有$大小= 0

但如果我嘗試沒有謂詞的XPath表達式,如 「//動物園:安尼米爾」 或 「//動物園:安尼米爾/諾姆」

如果我在這個xpath測試器上嘗試相同的表達式(與謂詞):http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm,它的工作原理

問題是什麼?

回答

1
"//zoo:animale[nome='".$name."']"; 

必須

"//zoo:animale[zoo:nome='".$name."']"; 
+0

或者,更整齊,' 「//動物園:安尼米爾[諾姆= '$名']」' ' – Borodin

+0

@Borodin :否,註釋*中的表達式不會在所提供的XML文檔中選擇任何節點。對於具有默認命名空間的文檔而言,這是非常重要 –