Heis的Blog

          保持簡單,保持愚蠢
          隨筆 - 29, 文章 - 1, 評論 - 122, 引用 - 0
          數據加載中……

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

                 同事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。
            


           




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

          posted on 2009-02-28 13:50 Heis 閱讀(2274) 評論(0)  編輯  收藏 所屬分類: JasperReport那些事兒

          主站蜘蛛池模板: 张家口市| 石台县| 临湘市| 花垣县| 和顺县| 岚皋县| 海门市| 明水县| 安仁县| 金塔县| 襄汾县| 巴彦淖尔市| 开封市| 吉首市| 樟树市| 馆陶县| 天水市| 西吉县| 姚安县| 龙里县| 高安市| 温泉县| 衡阳县| 北票市| 凤翔县| 缙云县| 昌黎县| 岳阳市| 保定市| 河南省| 维西| 克东县| 竹山县| 基隆市| 山西省| 兴安县| 北碚区| 乐至县| 康定县| 贵港市| 綦江县|