我決定使用eXist作爲我使用Perl編寫的應用程序的數據庫,並且我正在嘗試使用它。問題是,我已存儲的結構如下如何使用XPath查詢eXist?
<foo-bar00>
<perfdata datum="GigabitEthernet3_0_18">
<cli cmd="whatsup" detail="GigabitEthernet3/0/18" find="" given="">
<input_rate>3</input_rate>
<output_rate>3</output_rate>
</cli>
</perfdata>
<timeline>2011-5-23T11:15:33</timeline>
</foo-bar00>
爲.xml文件,它位於「/db/LAB/foo-bar00/2011/5/23/11_15_33.xml
」集合。
我能夠成功查詢它,像
my $xquery = 'doc("/db/LAB/foo-bar00/2011/5/23/11_15_33.xml")' ;
或$xquery
可以等於 = doc("/db/LAB/foo-bar00/2011/5/23/11_15_33.xml")/foo-bar00/perfdata/cli/data(output_rate)
或 = doc("/db/LAB/foo-bar00/2011/5/23/11_15_33.xml")/foo-bar00/data(timeline)
my ($rc1, $set) = $eXist->executeQuery($xquery) ;
my ($rc2, $count) = $eXist->numberOfResults($set) ;
my ($rc3, @data) = $eXist->retrieveResults($set) ;
$eXist->releaseResultSet($set) ;
print Dumper(@data) ;
,其結果是:
$VAR1 = {
'hitCount' => 1,
'foo-bar00' => {
'perfdata' => {
'cli' => {
'given' => '',
'detail' => 'GigabitEthernet3/0/18',
'input_rate' => '3',
'cmd' => 'whatsup',
'output_rate' => '3',
'find' => ''
},
'datum' => 'GigabitEthernet3_0_18'
},
'timeline' => '2011-5-23T11:15:33'
}
};
--->鑑於我知道我想從中檢索信息的xml文檔。 --->鑑於我想檢索時間線信息。
當我寫:
my $db_xml_doc = "/db/LAB/foo-bar00/2011/5/23/11_15_33.xml" ;
my ($db_rc, $db_datum) = $eXist->queryXPath("/foo-bar00/timeline", $db_xml_doc, "") ;
print Dumper($db_datum) ;
結果:
$VAR1 = {
'hash' => 1717362942,
'id' => 3,
'results' => [
{
'node_id' => '1.2',
'document' => '/db/LAB/foo-bar00/2011/5/23/11_15_33.xml'
}
]
};
的問題是:我如何才能找回 「時間線」 的信息?似乎「node_id」變量(= 1.2)可以指向「時間軸」信息,但我該如何使用它?
謝謝。
謝謝池上,但我沒有問如何解析.xml文件,但如何檢索存儲在數據庫中(沒有文件的一個節點,換句話說,並從數據庫中下載它來解析它將不會有效) – user690182 2011-05-25 10:58:26
@ user690182,我不知道'eXist'是一個庫。沒有鏈接到文檔或任何東西。 – ikegami 2011-05-25 19:27:39