2013-01-03 59 views
1

的路徑我有一個XML像XML - 尋找穿越給定節點

<Screen> 
    <window name="gui"> 
     <widget name="status" pos="0:0"> 
      <timedate name="timedate"/> 
      <message name="message"/> 
     </widget> 
    </window> 
</Screen> 

一件好事,這個XML是每一個節點都具有唯一的名稱。它不會在XML中的任何地方重複。

要找到一個節點,我可以使用xpath進行查詢,並得到它的存在/缺席的結果,但我需要找到遍歷的路徑。

示例我可以使用xpath query'// timedate'搜索timedate節點,但隨着此操作,我還需要遍歷的路徑,即Screen/window/widget/timedate。

請建議我一些方法來檢索路徑也。

您的幫助將得到高度讚賞。

+0

祖先或自: :timedate - 這個軸給你從元素到文檔元素的方式..我不太確定表達式是否正確,但是軸是。如果你可以得到一個有序的列表,你應該得到一個結果開始在根目錄下去的路徑比成爲像list.join('/'),但這就是javascript,我不知道perl – philipp

回答

1

確切的細節取決於您用來處理XML的模塊。例如,在XML::XSH2中,可以使用pwd命令。

一個更詳細的XML::LibXML例如:

#!/usr/bin/perl 
use warnings; 
use strict; 
use feature qw(say); 

use XML::LibXML; 

my $x = XML::LibXML->load_xml(location => 'example.xml'); 
my $n = $x->find('//timedate')->shift; 
say $n->nodePath; 
1

查看此答案的完整解決方案https://stackoverflow.com/a/4747858/36305

雖然解決方案在XSLT中,但如果需要,代碼可以轉換爲任何其他編程語言。

+0

偉大的解決方案,並感謝您的及時答覆。但是這一次,我正在尋找Perl本身的東西。我希望我也可以將這個答案標記爲接受:) – rpg