程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JasperReport那些事兒(三)——使用XPATH查詢XML

JasperReport那些事兒(三)——使用XPATH查詢XML

編輯:關於JAVA

同事Q:“小黑,你上次說一半不說一半,這次可得老實交待怎麼從XML查詢數據了吧。”

俺:“好好,我這就交待。你看我這星期不是忙得焦頭爛額麼?”(注:忙永遠是程序員的借口)

其實JasperReport使用的也不是什麼神秘的東西,就是XPATH。

XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進行遍歷(從w3cshool抄來的)。關於XPATH,我就不詳細講了,因為對於普通的報表,只需要掌握幾個常用的查詢;如果想深究網上有更好的教程(教程可以點這裡)。我這裡只簡單地講解XPATH的一些概念和常用的一些查詢。

(1)什麼是絕對路徑和相對路徑?

我這裡那是拿出我的NameList做例子吧。

<?xml version="1.0" encoding="utf-8" ?>
<NameList>
<Person>
<Name>強尼</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節點,那絕對路徑應該這樣寫:

/NameList/Person

現在以Person作為根路徑,如果要選取所有Person節點下的Name節點,那相對路徑可以這樣寫:

Name

所謂的相對路徑是不以/開頭,相對與一個絕對路徑的路徑。如果用絕對路徑選取所有Name節點,可以這樣寫:

/NameList/Person/Name

(2)帶條件的XPATH查詢

XPATH的條件是寫在路徑後的一個方括號內,條件支持XPATH的函數和一些邏輯運算符號。常用的邏輯運算符號有+,<,=,or,and等。以下是一些例子。

選取第一個Person節點

/NameList/Person[1]或/NameList/Person[position()=1]

選取Age小於50的Person節點

/NameList/Person[./Age<50]

選取Gender是女的Person節點

/NameList/Person[./Gender='女']

(3)XPATH的函數

count()函數主要是計算節點數量,可以帶一個參數,例如

查詢Person的節點數量,結果返回3

count(/NameList/Person)

position() 函數主要是用於條件查詢,返回節點的定位,例如

選取前兩個Person節點

/NameList/Person[position()<=2]

簡單介紹完XPATH,下面我們來看XPATH怎麼在JasperReport裡運用。我在JasperReport那些事兒(一)裡曾經介紹過XPATH的使用,但是沒有做詳細介紹。現在我們再來看其中的一個步驟。

看第十步,其實這裡就是配置了一個根路徑/NameList/Person,下面幾個field的Descirption其實也是XPATH表達式,配置了相對路徑。通過XPATH表達式,field會獲取到匹配節點的值,這就是XML數據填充的過程。

10)打開NameList_subreport0模板,先配置XPATH,然後右擊節點Name,選Add node as field.同樣將Gender和Age節點加入field。點OK。然後你可以看到左邊的結構視窗多了三個Field。

程序員的一生其實可短暫了,這電腦一開一關,一天過去了,嚎;電腦一開不關,那就成服務器了,嚎……

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved