<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://www.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)航:
     
    主站蜘蛛池模板: 亚洲精品偷拍视频免费观看| 国产亚洲综合成人91精品| 四虎永久在线精品免费一区二区 | 亚洲免费网站观看视频| 色偷偷噜噜噜亚洲男人| 久久国产成人精品国产成人亚洲 | 亚洲精品国产美女久久久| 精品一区二区三区免费毛片爱| 亚洲人成色777777老人头| 久久久久久A亚洲欧洲AV冫| 亚州免费一级毛片| 青青草97国产精品免费观看| 亚洲黄色免费网址| 亚洲高清无码在线观看| 2021国内精品久久久久精免费| 日韩亚洲人成在线综合| 亚洲视频欧洲视频| 亚洲国产精品狼友中文久久久| 在线视频精品免费| 中文字幕免费视频精品一| 亚洲熟妇无码一区二区三区导航| 中文字幕一精品亚洲无线一区| 毛片a级毛片免费播放100| 一区二区三区观看免费中文视频在线播放| 亚洲va久久久久| 久久久亚洲欧洲日产国码二区| mm1313亚洲精品无码又大又粗| 成人AV免费网址在线观看| 午夜精品免费在线观看 | 免费在线中文日本| 国产成人亚洲精品蜜芽影院| 亚洲精品成人图区| 国产aⅴ无码专区亚洲av| 亚洲成A人片77777国产| 国产精品久久久久久久久久免费| 小日子的在线观看免费| 久久国产一片免费观看| 国产午夜亚洲精品不卡免下载| 亚洲欧洲日韩国产一区二区三区| 久久久久久亚洲AV无码专区| 红杏亚洲影院一区二区三区|