JasperReport那些事兒(三)——使用XPATH查詢XML
同事Q:“小黑,你上次說一半不說一半,這次可得老實(shí)交待怎么從XML查詢數(shù)據(jù)了吧。”
俺:“好好,我這就交待。你看我這星期不是忙得焦頭爛額么?”(注:忙永遠(yuǎn)是程序員的借口)
其實(shí)JasperReport使用的也不是什么神秘的東西,就是XPATH。
XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進(jìn)行遍歷(從w3cshool抄來的)。關(guān)于XPATH,我就不詳細(xì)講了,因?yàn)閷τ谄胀ǖ膱?bào)表,只需要掌握幾個(gè)常用的查詢;如果想深究網(wǎng)上有更好的教程(教程可以點(diǎn)這里)。我這里只簡單地講解XPATH的一些概念和常用的一些查詢。
(1)什么是絕對路徑和相對路徑?
我這里那是拿出我的NameList做例子吧。
(2)帶條件的XPATH查詢
XPATH的條件是寫在路徑后的一個(gè)方括號(hào)內(nèi),條件支持XPATH的函數(shù)和一些邏輯運(yùn)算符號(hào)。常用的邏輯運(yùn)算符號(hào)有+,<,=,or,and等。以下是一些例子。
選取第一個(gè)Person節(jié)點(diǎn)
(3)XPATH的函數(shù)
count()函數(shù)主要是計(jì)算節(jié)點(diǎn)數(shù)量,可以帶一個(gè)參數(shù),例如
查詢Person的節(jié)點(diǎn)數(shù)量,結(jié)果返回3
position() 函數(shù)主要是用于條件查詢,返回節(jié)點(diǎn)的定位,例如
選取前兩個(gè)Person節(jié)點(diǎn)
簡單介紹完XPATH,下面我們來看XPATH怎么在JasperReport里運(yùn)用。我在JasperReport那些事兒(一)里曾經(jīng)介紹過XPATH的使用,但是沒有做詳細(xì)介紹。現(xiàn)在我們再來看其中的一個(gè)步驟。
看第十步,其實(shí)這里就是配置了一個(gè)根路徑/NameList/Person,下面幾個(gè)field的Descirption其實(shí)也是XPATH表達(dá)式,配置了相對路徑。通過XPATH表達(dá)式,field會(huì)獲取到匹配節(jié)點(diǎn)的值,這就是XML數(shù)據(jù)填充的過程。
10) 打開NameList_subreport0模板,先配置XPATH,然后右擊節(jié)點(diǎn)Name,選Add node as field.同樣將Gender和Age節(jié)點(diǎn)加入field。點(diǎn)OK。然后你可以看到左邊的結(jié)構(gòu)視窗多了三個(gè)Field。
程序員的一生其實(shí)可短暫了,這電腦一開一關(guān),一天過去了,嚎;電腦一開不關(guān),那就成服務(wù)器了,嚎……
俺:“好好,我這就交待。你看我這星期不是忙得焦頭爛額么?”(注:忙永遠(yuǎn)是程序員的借口)
其實(shí)JasperReport使用的也不是什么神秘的東西,就是XPATH。
XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進(jìn)行遍歷(從w3cshool抄來的)。關(guān)于XPATH,我就不詳細(xì)講了,因?yàn)閷τ谄胀ǖ膱?bào)表,只需要掌握幾個(gè)常用的查詢;如果想深究網(wǎng)上有更好的教程(教程可以點(diǎn)這里)。我這里只簡單地講解XPATH的一些概念和常用的一些查詢。
(1)什么是絕對路徑和相對路徑?
我這里那是拿出我的NameList做例子吧。
<?xml version="1.0" encoding="utf-8" ?>
<NameList>
<Person>
<Name>強(qiáng)尼</Name>
<Gender>男</Gender>
<Age>56</Age>
</Person>
<Person>
<Name>阿美</Name>
<Gender>女</Gender>
<Age>23</Age>
</Person>
<Person>
<Name>李麗</Name>
<Gender>女</Gender>
<Age>58</Age>
</Person>
</NameList>
例如我要選取所有的Person節(jié)點(diǎn),那絕對路徑應(yīng)該這樣寫:<NameList>
<Person>
<Name>強(qiáng)尼</Name>
<Gender>男</Gender>
<Age>56</Age>
</Person>
<Person>
<Name>阿美</Name>
<Gender>女</Gender>
<Age>23</Age>
</Person>
<Person>
<Name>李麗</Name>
<Gender>女</Gender>
<Age>58</Age>
</Person>
</NameList>
/NameList/Person
現(xiàn)在以Person作為根路徑,如果要選取所有Person節(jié)點(diǎn)下的Name節(jié)點(diǎn),那相對路徑可以這樣寫:Name
所謂的相對路徑是不以/開頭,相對與一個(gè)絕對路徑的路徑。如果用絕對路徑選取所有Name節(jié)點(diǎn),可以這樣寫:/NameList/Person/Name
(2)帶條件的XPATH查詢
XPATH的條件是寫在路徑后的一個(gè)方括號(hào)內(nèi),條件支持XPATH的函數(shù)和一些邏輯運(yùn)算符號(hào)。常用的邏輯運(yùn)算符號(hào)有+,<,=,or,and等。以下是一些例子。
選取第一個(gè)Person節(jié)點(diǎn)
/NameList/Person[1]或/NameList/Person[position()=1]
選取Age小于50的Person節(jié)點(diǎn)/NameList/Person[./Age<50]
選取Gender是女的Person節(jié)點(diǎn)/NameList/Person[./Gender='女']
(3)XPATH的函數(shù)
count()函數(shù)主要是計(jì)算節(jié)點(diǎn)數(shù)量,可以帶一個(gè)參數(shù),例如
查詢Person的節(jié)點(diǎn)數(shù)量,結(jié)果返回3
count(/NameList/Person)
position() 函數(shù)主要是用于條件查詢,返回節(jié)點(diǎn)的定位,例如
選取前兩個(gè)Person節(jié)點(diǎn)
/NameList/Person[position()<=2]
簡單介紹完XPATH,下面我們來看XPATH怎么在JasperReport里運(yùn)用。我在JasperReport那些事兒(一)里曾經(jīng)介紹過XPATH的使用,但是沒有做詳細(xì)介紹。現(xiàn)在我們再來看其中的一個(gè)步驟。
看第十步,其實(shí)這里就是配置了一個(gè)根路徑/NameList/Person,下面幾個(gè)field的Descirption其實(shí)也是XPATH表達(dá)式,配置了相對路徑。通過XPATH表達(dá)式,field會(huì)獲取到匹配節(jié)點(diǎn)的值,這就是XML數(shù)據(jù)填充的過程。
10) 打開NameList_subreport0模板,先配置XPATH,然后右擊節(jié)點(diǎn)Name,選Add node as field.同樣將Gender和Age節(jié)點(diǎn)加入field。點(diǎn)OK。然后你可以看到左邊的結(jié)構(gòu)視窗多了三個(gè)Field。

程序員的一生其實(shí)可短暫了,這電腦一開一關(guān),一天過去了,嚎;電腦一開不關(guān),那就成服務(wù)器了,嚎……
posted on 2009-02-28 13:50 Heis 閱讀(2265) 評論(0) 編輯 收藏 所屬分類: JasperReport那些事兒