<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    jxpath 學習筆記

    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

    一般的統計和使用 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 的位置函數 position 其他函數參考 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內) .....

    建立 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中


    建立內參
    ?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 確定范圍 很好 呵呵


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


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


    評論

    # re: jxpath 學習筆記  回復  更多評論   

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




    結果集


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


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲色图国产精品| 亚洲?v无码国产在丝袜线观看| 免费观看亚洲人成网站| 亚洲国产av一区二区三区丶| 最新国产乱人伦偷精品免费网站| 成全视频免费高清| 亚洲精品91在线| 最近免费2019中文字幕大全| 国产AV无码专区亚洲AV漫画 | 亚洲视频在线观看网站| 免费看一区二区三区四区| 亚洲色偷偷狠狠综合网| 免费国产黄网站在线观看动图| 午夜a级成人免费毛片| 亚洲精品无码不卡在线播放| aa级一级天堂片免费观看| 亚洲精品国产福利在线观看| 亚洲电影免费观看| 亚洲一卡2卡3卡4卡乱码 在线| 久久精品免费全国观看国产| 亚洲a级成人片在线观看| 国语成本人片免费av无码| 亚洲成a∨人片在无码2023 | 2021国内精品久久久久精免费| 亚洲欧洲日产国码无码久久99 | 久久青草免费91线频观看不卡| 亚洲精品美女在线观看播放| 无码国产精品一区二区免费式直播 | 99re在线视频免费观看| 亚洲伊人久久大香线蕉结合| 免费观看亚洲人成网站| 免费人成黄页在线观看日本| 亚洲国产精品免费在线观看| 在线免费观看色片| 97无码人妻福利免费公开在线视频| 亚洲第一视频网站| 亚洲毛片网址在线观看中文字幕 | 毛片a级毛片免费观看品善网| 豆国产96在线|亚洲| 亚洲经典在线中文字幕| 国产美女无遮挡免费视频|