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

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

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

    posts - 15,  comments - 8,  trackbacks - 0
    在使用Dom4j解析xml文檔時(shí),我們很希望有一種類似正則表達(dá)式的東西來規(guī)范查詢條件,而xpath正是這樣一種很便利的規(guī)則.
    String xmlName = path + "/" + userName + ".xml";   
            
    // 定義需要返回的第一級(jí)菜單的名字集合   
            List firstNames = new ArrayList();   
            
    // Attribute的屬性集合   
            List attrs = new ArrayList();   
            
    // 聲明SAXReader   
            SAXReader saxReader = new SAXReader();   
            
    try {   
                Document doc 
    = saxReader.read(xmlName);   
                
    // 獲得所有g(shù)rade=1的Element的text的值   
                String xpath = "/tree/item";   
                List list 
    = doc.selectNodes(xpath);   
                Iterator it 
    = list.iterator();   
                
    while (it.hasNext()) {   
                    Element elt 
    = (Element) it.next();   
                    Attribute attr 
    = elt.attribute("grade");   
                    System.out.println(attr.getValue());   
                    
    if (new Integer(attr.getValue()).intValue() == 1) {   
                        attr 
    = elt.attribute("text");   
                        attrs.add(attr.getValue());   
                        System.out.println(attr.getValue());   
                    }   
                }   
      
            } 
    catch (DocumentException e) {   
                e.printStackTrace();   
            }   
            
    return attrs;  

    String xmlName 
    = path + "/" + userName + ".xml"
    // 定義需要返回的第一級(jí)菜單的名字集合 
    List firstNames = new ArrayList(); 
    // Attribute的屬性集合 
    List attrs = new ArrayList(); 
    // 聲明SAXReader 
    SAXReader saxReader = new SAXReader(); 
    try { 
    Document doc 
    = saxReader.read(xmlName); 
    // 獲得所有g(shù)rade=1的Element的text的值 
    String xpath = "/tree/item"
    List list 
    = doc.selectNodes(xpath); 
    Iterator it 
    = list.iterator(); 
    while (it.hasNext()) { 
    Element elt 
    = (Element) it.next(); 
    Attribute attr 
    = elt.attribute("grade"); 
    System.out.println(attr.getValue()); 
    if (new Integer(attr.getValue()).intValue() == 1) { 
    attr 
    = elt.attribute("text"); 
    attrs.add(attr.getValue()); 
    System.out.println(attr.getValue()); 



    catch (DocumentException e) { 
    e.printStackTrace(); 

    return attrs;

    還有一個(gè)是獲取某個(gè)節(jié)點(diǎn)下面里的所有第一級(jí)子節(jié)點(diǎn),而不是所有的節(jié)點(diǎn)(包括子節(jié)點(diǎn)和孫節(jié)點(diǎn)).
    public static List getSecondMenuNames(String textName, String path,   
                String userName) {   
            String xmlName 
    = path + "/" + userName + ".xml";   
            String name 
    = textName;   
            
    // 定義需要返回的第二級(jí)菜單的名字集合   
            List firstNames = new ArrayList();   
            
    // Attribute的屬性集合   
            List attrs = new ArrayList();   
            
    // 聲明SAXReader   
            SAXReader saxReader = new SAXReader();   
            
    try {   
                Document doc 
    = saxReader.read(xmlName);   
          
    // 這個(gè)xpath的意思是,獲取text='系統(tǒng)管理'的一個(gè)Item下的所有Item的節(jié)點(diǎn)   
                String xpath = "//item[@text='" + name + "']/child::*";   
      
                List list 
    = doc.selectNodes(xpath);   
                Iterator it 
    = list.iterator();   
                
    while (it.hasNext()) {   
                    Element elt 
    = (Element) it.next();   
      
                    Attribute attr 
    = elt.attribute("grade");   
                    System.out.println(attr.getValue());   
      
                    attr 
    = elt.attribute("text");   
                    System.out.println(attr.getValue());   
                    attrs.add(attr.getValue());   
                }   
            } 
    catch (Exception e) {   
                e.printStackTrace();   
            }   
            
    return attrs;   
        }  

    public static List getSecondMenuNames(String textName, String path, 
    String userName) { 
    String xmlName 
    = path + "/" + userName + ".xml"
    String name 
    = textName; 
    // 定義需要返回的第二級(jí)菜單的名字集合 
    List firstNames = new ArrayList(); 
    // Attribute的屬性集合 
    List attrs = new ArrayList(); 
    // 聲明SAXReader 
    SAXReader saxReader = new SAXReader(); 
    try { 
    Document doc 
    = saxReader.read(xmlName); 
    // 這個(gè)xpath的意思是,獲取text='系統(tǒng)管理'的一個(gè)Item下的所有Item的節(jié)點(diǎn) 
    String xpath = "//item[@text='" + name + "']/child::*"

    List list 
    = doc.selectNodes(xpath); 
    Iterator it 
    = list.iterator(); 
    while (it.hasNext()) { 
    Element elt 
    = (Element) it.next(); 

    Attribute attr 
    = elt.attribute("grade"); 
    System.out.println(attr.getValue()); 

    attr 
    = elt.attribute("text"); 
    System.out.println(attr.getValue()); 
    attrs.add(attr.getValue()); 

    catch (Exception e) { 
    e.printStackTrace(); 

    return attrs; 
    }

    注意看其中的xpath的寫法,正是因?yàn)橛辛藊path,我們才能如此簡(jiǎn)單靈活的對(duì)xml進(jìn)行操作.
    剛剛使用xpath的時(shí)候可能會(huì)報(bào)一個(gè)錯(cuò)誤:Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
    這時(shí)我們應(yīng)該往CLASSPATH導(dǎo)入一個(gè)jar包,叫jaxen-1.1.1.jar,可從網(wǎng)上下載.

    <?xml version="1.0" encoding="ISO-8859-1"?> 
    <bookstore> 
    <book> 
      
    <title lang="eng">Harry Potter</title> 
      
    <price>29.99</price> 
    </book> 
    <book> 
      
    <title lang="eng">Learning XML</title> 
      
    <price>39.95</price> 
    </book> 
    </bookstore>

    表達(dá)式                        描述
    節(jié)點(diǎn)名                   選擇所有該名稱的節(jié)點(diǎn)集
    /                        選擇根節(jié)點(diǎn)
    //                       選擇當(dāng)前節(jié)點(diǎn)下的所有節(jié)點(diǎn)
    .                        選擇當(dāng)前節(jié)點(diǎn)
    ..                       選擇父節(jié)點(diǎn)
    @                        選擇屬性
    示例
    表達(dá)式                        描述
    bookstore                選擇所有bookstore子節(jié)點(diǎn)
    /bookstore               選擇根節(jié)點(diǎn)bookstore
    bookstore/book           在bookstore的子節(jié)點(diǎn)中選擇所有名為book的節(jié)點(diǎn)
    //book                   選擇xml文檔中所有名為book的節(jié)點(diǎn)
    bookstore//book          選擇節(jié)點(diǎn)bookstore下的所有名為book為節(jié)點(diǎn)
    //@lang                  選擇所有名為lang的屬性

    表達(dá)式                                  描述
    /bookstore/book[1]                 選擇根元素bookstore的book子元素中的第一個(gè)(注意: IE5以上瀏覽器中第一個(gè)元素是0)
    /bookstore/book[last()]            選擇根元素bookstore的book子元素中的最后一個(gè)
    /bookstore/book[last()-1]          選擇根元素bookstore的book子元素中的最后第二個(gè)
    /bookstore/book[position()35.00]   選擇根元素bookstore的book子元素中那些擁有price子元素且值大于35的
    /bookstore/book[price>35.00]/title 選擇根元素bookstore的book子元素中那些擁有price子元素且值大于35的title子元素

    通配符                        描述
    *                        匹配所有元素
    @*                       匹配所有屬性節(jié)點(diǎn)
    node()                   匹配任何類型的節(jié)點(diǎn)
    示例
    表達(dá)式                        描述
    /bookstore/*             選擇根元素bookstore的下的所有子元素
    //*                      選擇文檔中所有元素
    //title[@*]              選擇所有擁有屬性的title元素
    posted on 2009-05-19 00:12 lvq810 閱讀(613) 評(píng)論(0)  編輯  收藏 所屬分類: Open Framekwork
    主站蜘蛛池模板: 亚洲福利视频一区二区| 亚洲精品人成在线观看| 亚洲日韩人妻第一页| 亚洲av无码精品网站| 亚洲av无码片区一区二区三区| 高潮毛片无遮挡高清免费| 午夜免费福利片观看| 国产乱色精品成人免费视频| 亚洲免费视频网站| 日韩电影免费在线观看中文字幕| 国产乱子伦精品免费无码专区| 亚洲AV无码一区二区大桥未久| 无码av免费网站| 91亚洲va在线天线va天堂va国产 | igao激情在线视频免费| 成人免费的性色视频| 国产亚洲精品拍拍拍拍拍| 亚洲日韩国产精品乱-久| 久久精品免费观看| 亚洲福利中文字幕在线网址| 免费无码午夜福利片69| 精品免费国产一区二区| 久久久久久亚洲AV无码专区 | 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 少妇亚洲免费精品| 嫩草视频在线免费观看| 亚洲福利秒拍一区二区| 精品一区二区三区免费| 亚洲成aⅴ人片在线观| 午夜精品射精入后重之免费观看| 亚洲精品免费在线| 日本免费一区二区三区最新 | 精品亚洲麻豆1区2区3区| 日韩版码免费福利视频| 2022年亚洲午夜一区二区福利| 91免费资源网站入口| 亚洲AV无码精品蜜桃| 全亚洲最新黄色特级网站 | 国产97视频人人做人人爱免费| 亚洲va久久久噜噜噜久久| 最近免费中文字幕视频高清在线看|