<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 165, comments - 198, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    jxpath 學(xué)習(xí)筆記

    Posted on 2007-08-13 10:58 G_G 閱讀(2191) 評論(1)  編輯  收藏 所屬分類: Jakarta Commons
    get set 參考 BeanUtil 包 和 Xpath
    http://commons.apache.org/? 的 jxpath

    類的加載
    JXPathContext?context?=?JXPathContext.newContext( obj );
    //和 xpath 的 范圍確定

    一般取值 存值
    String?fName?=?(String)context.getValue("firstName"); //setValue
    //參考 http://m.tkk7.com/Good-Game/archive/2007/08/10/135739.html

    一般的統(tǒng)計和使用 c 為 list [id,name,.....]

    ????????JXPathContext?context?=?JXPathContext.newContext(c);
    ??????? System.out.println(?context.getValue(
    "count(?.[name='oo'?and?id='1'?]?)")?); //對象 name=oo 和 id=1的有多少個
    System.out.println( context.getValue("sum( .[name='oo' and id='1' ]/id )") );//對象name=oo和id=1的所有id相加





    得到集合
    ?Iterator?threeBooks?=?context.iterate("books[position()?<?4]");
    //xpath 的位置函數(shù) position 其他函數(shù)參考 http://www.w3.org/TR/xpath
    //4 Core Function Library

    xpath 使用
    public?class?Employee?{
    ????
    private?Map?addressMap?=?new?HashMap();
    ????{
    ????????addressMap.put(
    "home",?new?Address());
    ????????addressMap.put(
    "office",?new?Address());
    ????}
    ????
    public?Map?getAddresses(){
    ???????
    return?addressMap;
    ????}
    ????
    ?}
    ?String?homeZipCode?
    =?(String)context.?getValue("addresses[@name='home']/zipCode");
    //使用的是 addressMap map 的 key = home 的Address類屬性的 zipCode

    xml 在程序 與 xpath 的切入點
    ????<?xml?version="1.0"??>
    ????
    <vendor>
    ??????
    <location?id="store101">
    ????????
    <address>
    ??????????
    <street>Orchard?Road</street>
    ????????
    </address>
    ??????
    </location>

    ??????
    <location?id="store102">
    ????????
    <address>
    ??????????
    <street>Tangerine?Drive</street>
    ????????
    </address>
    ??????
    </location>
    ????
    </vendor>

    class?Company?{
    ????
    private?Container?locations?=?null;

    ????
    public?Container?getLocations(){
    ????????
    if?(locations?==?null){
    ????????????URL?url?
    =?getClass().getResource("Vendor.xml");
    ????????????locations?
    =?new?XMLDocumentContainer(url);
    ????????}
    ????????
    return?locations;
    ????}
    ?}
    ?
    ?context?
    =?JXPathContext.newContext(new?Company());
    ?
    ?String?street?
    =?(String)context.getValue(
    ????????????????
    "locations/vendor/location[@id?=?'store102']//street");
    // 類Container的 屬性 locations 頭 vendor(xml內(nèi)) .....

    建立 Path工廠 就是 自定義字符串 得到 自定義類
    ?public?class?AddressFactory?extends?AbstractFactory?{
    ????
    public?boolean?createObject(JXPathContext?context,?Pointer?pointer,
    ????????????????????????????????Object?parent,?String?name,?
    int?index){
    ?????
    if?((parent?instanceof?Employee)?&&?name.equals("address"){
    ???????((Employee)parent).setAddress(
    new?Address());
    ???????
    return?true;
    ?????}
    ?????
    return?false;
    ???}
    ?}

    ?JXPathContext?context?
    =?JXPathContext.newContext(emp);
    ?context.setFactory(
    new?AddressFactory());
    ?context.createPath(
    "address");
    ?context.createPathAndSetValue(
    "address/zipCode",?"90190");
    // emp 類就是 createObject方法中的 Object
    //運行解析到 address字符 就進入 if中


    建立內(nèi)參
    ?JXPathContext?context?=?JXPathContext.newContext(auth);
    ?context.getVariables().declareVariable(
    "index",?new?Integer(2));
     context.setValue("$index", new Integer(3));
    ?Book?secondBook?=?(Book)context.getValue("books[$index]");
    // $index 為 3

    確定范圍
    Pointer?
    JXPathContext?context?=?JXPathContext.newContext(bean);
    ?Pointer?addressPtr?
    =?context.getPointer("/employees[1]/addresses[2]");
    ?JXPathContext?relativeContext?
    =?
    ??????????????context.getRelativeContext(addressPtr);

    ?String?zipCode?=?(String)relativeContext.getValue("zipCode");
    //可以用 xpath 確定范圍 很好 呵呵


    方法的聯(lián)系應(yīng)用
    ?public?class?Formats?{
    ????
    public?static?String?date(Date?d,?String?pattern){
    ????????
    return?new?SimpleDateFormat(pattern).format(d);
    ????}
    ????
    ?}??????????????????????????????????????????????????? ?
    ?context.setFunctions(
    new?ClassFunctions(Formats.class,?"format"));
    //方法的設(shè)置 format
    ?
    ?context.getVariables().declareVariable(
    "today",?new?Date());
    ?String?today?
    =
    ?????(String)context.getValue(
    "format:date($today,?'MM/dd/yyyy')");


    心得: 代碼可以寫成什么樣呢~~ (JXpath)


    評論

    # re: jxpath 學(xué)習(xí)筆記  回復(fù)  更多評論   

    2007-09-05 17:26 by G_G
     1 2 3
     4 5 6
     7 8 9
     ...
     28 29 30




    結(jié)果集


     sum( .[1]/num1 ) 會全加 不會就第一個 ?
     sum( .[num1=1]/*[contains(name(),'num')] ) 模糊查詢使用  結(jié)果:6
     
     sum( .[num1=1]/*[contains(name(),'num')] ) + sum( .[num1=4]/*[contains(name(),'num')] ) 
     sum( .[num1=1 or num1=4]/*[contains(name(),'num')] )
     結(jié)果:21
     
     .[position()=last()]/num1  錯誤? 不支持 last()  等方法嗎?
     .[last()]/num1  結(jié)果 1
     .[last()-1]/num1 錯誤  jxpath 對定位好象不太兼容 。
     
     
     substring-after('1999/04/01','/') 結(jié)果04/01
     
     .[num1=1]/*[name()='num1']  結(jié)果:1
     
     last()  結(jié)果:10
     
      .[num1=4]/*[string-length( name() )
    <=4 ]  結(jié)果: 4 5 6 


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲一区免费观看| 亚洲欧洲精品无码AV| 美女视频黄的免费视频网页| 免费在线观看中文字幕| 久久水蜜桃亚洲AV无码精品 | 国产亚洲色视频在线| 一级毛片a免费播放王色| 亚洲日韩国产成网在线观看| 亚洲福利视频一区二区三区| 男女污污污超污视频免费在线看| 亚洲一级毛片免费看| 亚洲中文久久精品无码1| 免费观看一区二区三区| 亚洲AV无码成人精品区天堂| 7x7x7x免费在线观看| 亚洲人成无码网站| 亚洲一区二区在线免费观看| 亚洲欧洲日产韩国在线| 日韩a级无码免费视频| 亚洲Av无码精品色午夜| 久久精品免费一区二区| 亚洲精品欧美综合四区| 亚洲真人日本在线| 日本免费久久久久久久网站| 亚洲中文字幕无码日韩| 久久aⅴ免费观看| 国产精品久久亚洲不卡动漫| 91热成人精品国产免费| 亚洲砖码砖专无区2023| 亚洲一级Av无码毛片久久精品| 中文字幕日本人妻久久久免费| 亚洲精品美女视频| 国产伦精品一区二区三区免费下载 | 9久久免费国产精品特黄| 亚洲伊人tv综合网色| 日本免费一本天堂在线| 亚洲国产精品ⅴa在线观看| 久久久久久A亚洲欧洲AV冫| 最近免费中文字幕大全免费| 免费精品国产自产拍在线观看| 久久久久久亚洲精品成人|