溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

XML中XPATH語法的示例分析

發(fā)布時(shí)間:2021-09-17 14:45:31 來源:億速云 閱讀:129 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“XML中XPATH語法的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“XML中XPATH語法的示例分析”這篇文章吧。

為什么需要xpath?

在使用dom4j的時(shí)候,我們不能跨層獲取某一個(gè)元素,必須一層一層去獲取,這就非常麻煩。
所以為了我們更方便地訪問某個(gè)節(jié)點(diǎn),我們可以使用xpath技術(shù),它可以讓我們非常方便地讀取到指定節(jié)點(diǎn)。

xpath通常結(jié)合dom4j配合使用,而且如果要使用xpath,則需要引入一個(gè)新的包jaxen-1.1-beta-6.jar

xpath的基礎(chǔ)語法有以下幾點(diǎn):

1.基本的xpath語法類似于在一個(gè)文件系統(tǒng)中定位文件,如果路徑以斜線/開始,那么該路徑就表示到一個(gè)元素的絕對(duì)路徑.

(1)/AAA,它表示選擇根元素AAA

<AAA>這里    <BBB/>
    <CCC/>
    <BBB/>
    <BBB/>
    <DDD>
        <BBB/>
    <DDD/>
    <CCC/><AAA/>這里

(2)/AAA/CCC,表示選擇AAA的所有CCC子元素

<AAA>
    <BBB/>
    <CCC/>這里    <BBB/>
    <BBB/>
    <DDD>
        <BBB/>
    <DDD/>
    <CCC/>這里<AAA/>

(3)/AAA/DDD/BBB,表示選擇AAA的子元素DDD的所有BBB子元素

<AAA>
    <BBB/>
    <CCC/>
    <BBB/>
    <BBB/>
    <DDD>
        <BBB/>這里    <DDD/>
    <CCC/><AAA/>

那么怎么在dom4j中運(yùn)用xpath呢?其實(shí)很簡單:

//1.得到SAXReader解析器SAXReader saxReader = new SAXReader();
//2.指定去解析哪個(gè)文件Document document = saxReader.read(new File(path));
//3.可以使用xpath隨心讀取// document.selectNodes(args)返回多個(gè)元素
// document.selectSingleNode(args)返回單個(gè)元素List nodes = document.selectNodes("/AAA/BBB");

通過dom4j得到document對(duì)象后,可以使用document的selectNodes(args)方法,這個(gè)方法會(huì)根據(jù)你寫的xpath路徑返回一個(gè)List,余下的操作就和dom4j類似了。

同時(shí)它也有一個(gè)selectSingleNode(args)方法,用于返回一個(gè)單個(gè)的Node。


下面繼續(xù)介紹其他的xpath語法:

2.如果路徑以雙斜線//開頭,則表示文檔中所有滿足雙斜線//之后規(guī)則的元素(無論層級(jí)關(guān)系)

(1)//BBB,它表示選擇所有BBB元素

<AAA>
    <BBB/>這里    <CCC/>
    <BBB/>這里    <DDD>
        <BBB/>這里    </DDD>
    <CCC>
        <DDD>
            <BBB/>這里            <BBB/>這里        </DDD>
    </CCC></AAA>

(2)//DDD/BBB,表示所有父元素是DDD的BBB元素

<AAA>
    <BBB/>
    <CCC/>
    <BBB/>
    <DDD>
        <BBB/>這里    </DDD>
    <CCC>
        <DDD>
            <BBB/>這里            <BBB/>這里        </DDD>
    </CCC></AAA>

3.星號(hào)*表示選擇所有由星號(hào)之前路徑所定位的元素

(1)/AAA/CCC/DDD/*,它表示選擇所有路徑依附于/AAA/CCC/DDD的元素:

<AAA>
    <XXX>
        <DDD>
            <BBB/>
            <BBB/>
            <EEE/>
            <FFF/>
        </DDD>
    </XXX>
    <CCC>
        <DDD>
            <BBB/>這里            
            <BBB/>這里            
            <EEE/>這里            
            <FFF/>這里        
            </DDD>
    </CCC>
    <CCC>
        <BBB>
            <BBB>
                <BBB/>
            </BBB>
        </BBB>
    </CCC></AAA>

(2)/*/*/*/BBB,它表示所有的有3個(gè)祖先元素的BBB元素

<AAA>
    <XXX>
        <DDD>
            <BBB/>這里            
            <BBB/>這里            
            <EEE/>
            <FFF/>
        </DDD>
    </XXX>
    <CCC>
        <DDD>
            <BBB/>這里            
            <BBB/>這里            
            <EEE/>
            <FFF/>
        </DDD>
    </CCC>
    <CCC>
        <BBB>這里            <BBB>
                <BBB/>
            </BBB>
        </BBB>
    </CCC></AAA>

(3)//*,它表示選擇所有的元素


4.方括號(hào)里的表達(dá)式可以進(jìn)一步地指定元素,其中數(shù)字表示元素在選擇集里的位置,而last()函數(shù)則表示選擇集中的最后一個(gè)元素。特別要注意的是這里的下標(biāo)是從1開始的,而不是0!
(1)/AAA/BBB[1],它表示選擇AAA的第一個(gè)BBB子元素

<AAA>
    <BBB/>這個(gè)    <BBB/>
    <BBB/>
    <BBB/></AAA>

(2)/AAA/BBB[last()],表示選擇AAA的最后一個(gè)BBB元素

<AAA>
    <BBB/>
    <BBB/>
    <BBB/>
    <BBB/>這個(gè)</AAA>

5.對(duì)屬性的操作

(1)//@id,選擇所有的id屬性,注意:是把所有的id屬性當(dāng)做節(jié)點(diǎn)返回,而不是返回有id屬性的節(jié)點(diǎn)。

<AAA>
    <BBB id="b1"/>返回這里的id屬性節(jié)點(diǎn)    <BBB id="b2"/>也返回這里的id屬性節(jié)點(diǎn)    <BBB name="bbb"/>
    <BBB/></AAA>

(2)//BBB[@id],選擇所有有id屬性的BBB節(jié)點(diǎn)

<AAA>
    <BBB id="b1"/>返回這個(gè)BBB節(jié)點(diǎn)    <BBB id="b2"/>也返回這個(gè)BBB節(jié)點(diǎn)    <BBB name="bbb"/>
    <BBB/></AAA>

(3)//BBB[@name],選擇所有有name屬性的BBB節(jié)點(diǎn)

<AAA>
    <BBB id="b1"/>
    <BBB id="b2"/>
    <BBB name="bbb"/>返回這個(gè)BBB節(jié)點(diǎn)    <BBB/></AAA>

(4)//BBB[@*],選擇所有有屬性的BBB節(jié)點(diǎn)

<AAA>
    <BBB id="b1"/>返回這個(gè)BBB節(jié)點(diǎn)    <BBB id="b2"/>返回這個(gè)BBB節(jié)點(diǎn)    <BBB name="bbb"/>返回這個(gè)BBB節(jié)點(diǎn)    <BBB/></AAA>

(5)//BBB[not(@*)],選擇所有沒有屬性的BBB節(jié)點(diǎn)

<AAA>
    <BBB id="b1"/>
    <BBB id="b2"/>
    <BBB name="bbb"/>
    <BBB/>這個(gè)</AAA>

6.屬性的值可以被用來作為選擇的準(zhǔn)則

(1)//BBB[@id='b1'],選擇含有屬性id且其值為’b1’的BBB元素

<AAA>
    <BBB id="b1"/>這個(gè)    <BBB name="bbb"/>
    <BBB name="bbb"/></AAA>

7.count()函數(shù)可以計(jì)數(shù)所選元素的個(gè)數(shù)

(1)//*[count(BBB)=2],選擇含有2個(gè)BBB子元素的元素

<AAA>
    <CCC>
        <BBB/>
        <BBB/>
        <BBB/>
    </CCC>
    <DDD>返回這個(gè)元素        <BBB/>
        <BBB/>
    </DDD>
    <EEE>
        <CCC/>
        <DDD/>
    </EEE></AAA>

(2)//*[count(*)=2],選擇含有2個(gè)子元素的元素

<AAA>
    <CCC>
        <BBB/>
        <BBB/>
        <BBB/>
    </CCC>
    <DDD>返回這個(gè)元素        <BBB/>
        <BBB/>
    </DDD>
    <EEE>也返回這個(gè)元素        <CCC/>
        <DDD/>
    </EEE></AAA>

還有很多其他的語法,包括很多函數(shù)的應(yīng)用,用的不多,這里不做介紹


另外,上述介紹的幾點(diǎn)語法可以任意組合,比如下述的xml文檔:

<AAA>
    <BBB id="b1">
        <CCC>
            <KKK>k1</KKK>
        </CCC>
        <CCC>
            <KKK>k2</KKK>這個(gè)        </CCC>
    </BBB>
    <BBB id="b2"/>
    <BBB name="bbb"/></AAA>

假如我們現(xiàn)在要找AAA元素下面的第1個(gè)BBB子元素下面的第2CCC子元素的KKK子元素,則xpath路徑應(yīng)該這么寫:
/AAA/BBB[1]/CCC[2]/KKK

為什么需要xpath?

在使用dom4j的時(shí)候,我們不能跨層獲取某一個(gè)元素,必須一層一層去獲取,這就非常麻煩。
所以為了我們更方便地訪問某個(gè)節(jié)點(diǎn),我們可以使用xpath技術(shù),它可以讓我們非常方便地讀取到指定節(jié)點(diǎn)。

xpath通常結(jié)合dom4j配合使用,而且如果要使用xpath,則需要引入一個(gè)新的包jaxen-1.1-beta-6.jar

xpath的基礎(chǔ)語法有以下幾點(diǎn):

1.基本的xpath語法類似于在一個(gè)文件系統(tǒng)中定位文件,如果路徑以斜線/開始,那么該路徑就表示到一個(gè)元素的絕對(duì)路徑.

(1)/AAA,它表示選擇根元素AAA

<AAA>這里    <BBB/>
    <CCC/>
    <BBB/>
    <BBB/>
    <DDD>
        <BBB/>
    <DDD/>
    <CCC/><AAA/>這里

(2)/AAA/CCC,表示選擇AAA的所有CCC子元素

<AAA>
    <BBB/>
    <CCC/>這里    <BBB/>
    <BBB/>
    <DDD>
        <BBB/>
    <DDD/>
    <CCC/>這里<AAA/>

(3)/AAA/DDD/BBB,表示選擇AAA的子元素DDD的所有BBB子元素

<AAA>
    <BBB/>
    <CCC/>
    <BBB/>
    <BBB/>
    <DDD>
        <BBB/>這里    <DDD/>
    <CCC/><AAA/>

那么怎么在dom4j中運(yùn)用xpath呢?其實(shí)很簡單:

//1.得到SAXReader解析器SAXReader saxReader = new SAXReader();
//2.指定去解析哪個(gè)文件Document document = saxReader.read(new File(path));
//3.可以使用xpath隨心讀取
// document.selectNodes(args)返回多個(gè)元素
// document.selectSingleNode(args)返回單個(gè)元素List nodes = document.selectNodes("/AAA/BBB");

通過dom4j得到document對(duì)象后,可以使用document的selectNodes(args)方法,這個(gè)方法會(huì)根據(jù)你寫的xpath路徑返回一個(gè)List,余下的操作就和dom4j類似了。

同時(shí)它也有一個(gè)selectSingleNode(args)方法,用于返回一個(gè)單個(gè)的Node。


下面繼續(xù)介紹其他的xpath語法:

2.如果路徑以雙斜線//開頭,則表示文檔中所有滿足雙斜線//之后規(guī)則的元素(無論層級(jí)關(guān)系)

(1)//BBB,它表示選擇所有BBB元素

<AAA>
    <BBB/>這里    <CCC/>
    <BBB/>這里    <DDD>
        <BBB/>這里    </DDD>
    <CCC>
        <DDD>
            <BBB/>這里            <BBB/>這里        </DDD>
    </CCC></AAA>

(2)//DDD/BBB,表示所有父元素是DDD的BBB元素

<AAA>
    <BBB/>
    <CCC/>
    <BBB/>
    <DDD>
        <BBB/>這里    </DDD>
    <CCC>
        <DDD>
            <BBB/>這里            <BBB/>這里        </DDD>
    </CCC></AAA>

3.星號(hào)*表示選擇所有由星號(hào)之前路徑所定位的元素

(1)/AAA/CCC/DDD/*,它表示選擇所有路徑依附于/AAA/CCC/DDD的元素:

<AAA>
    <XXX>
        <DDD>
            <BBB/>
            <BBB/>
            <EEE/>
            <FFF/>
        </DDD>
    </XXX>
    <CCC>
        <DDD>
            <BBB/>這里            
            <BBB/>這里            
            <EEE/>這里            
            <FFF/>這里        
            </DDD>
    </CCC>
    <CCC>
        <BBB>
            <BBB>
                <BBB/>
            </BBB>
        </BBB>
    </CCC></AAA>

(2)/*/*/*/BBB,它表示所有的有3個(gè)祖先元素的BBB元素

<AAA>
    <XXX>
        <DDD>
            <BBB/>這里            
            <BBB/>這里            
            <EEE/>
            <FFF/>
        </DDD>
    </XXX>
    <CCC>
        <DDD>
            <BBB/>這里            
            <BBB/>這里            
            <EEE/>
            <FFF/>
        </DDD>
    </CCC>
    <CCC>
        <BBB>這里            
        <BBB>
                <BBB/>
            </BBB>
        </BBB>
    </CCC></AAA>

(3)//*,它表示選擇所有的元素


4.方括號(hào)里的表達(dá)式可以進(jìn)一步地指定元素,其中數(shù)字表示元素在選擇集里的位置,而last()函數(shù)則表示選擇集中的最后一個(gè)元素。特別要注意的是這里的下標(biāo)是從1開始的,而不是0!
(1)/AAA/BBB[1],它表示選擇AAA的第一個(gè)BBB子元素

<AAA>
    <BBB/>這個(gè)    <BBB/>
    <BBB/>
    <BBB/></AAA>

(2)/AAA/BBB[last()],表示選擇AAA的最后一個(gè)BBB元素

<AAA>
    <BBB/>
    <BBB/>
    <BBB/>
    <BBB/>這個(gè)</AAA>

5.對(duì)屬性的操作

(1)//@id,選擇所有的id屬性,注意:是把所有的id屬性當(dāng)做節(jié)點(diǎn)返回,而不是返回有id屬性的節(jié)點(diǎn)。

<AAA>
    <BBB id="b1"/>返回這里的id屬性節(jié)點(diǎn)    <BBB id="b2"/>也返回這里的id屬性節(jié)點(diǎn)    <BBB name="bbb"/>
    <BBB/></AAA>

(2)//BBB[@id],選擇所有有id屬性的BBB節(jié)點(diǎn)

<AAA>
    <BBB id="b1"/>返回這個(gè)BBB節(jié)點(diǎn)    <BBB id="b2"/>也返回這個(gè)BBB節(jié)點(diǎn)    <BBB name="bbb"/>
    <BBB/></AAA>

(3)//BBB[@name],選擇所有有name屬性的BBB節(jié)點(diǎn)

<AAA>
    <BBB id="b1"/>
    <BBB id="b2"/>
    <BBB name="bbb"/>返回這個(gè)BBB節(jié)點(diǎn)    <BBB/></AAA>

(4)//BBB[@*],選擇所有有屬性的BBB節(jié)點(diǎn)

<AAA>
    <BBB id="b1"/>返回這個(gè)BBB節(jié)點(diǎn)    <BBB id="b2"/>返回這個(gè)BBB節(jié)點(diǎn)    <BBB name="bbb"/>返回這個(gè)BBB節(jié)點(diǎn)    <BBB/></AAA>

(5)//BBB[not(@*)],選擇所有沒有屬性的BBB節(jié)點(diǎn)

<AAA>
    <BBB id="b1"/>
    <BBB id="b2"/>
    <BBB name="bbb"/>
    <BBB/>這個(gè)</AAA>

6.屬性的值可以被用來作為選擇的準(zhǔn)則

(1)//BBB[@id='b1'],選擇含有屬性id且其值為’b1’的BBB元素

<AAA>
    <BBB id="b1"/>這個(gè)    <BBB name="bbb"/>
    <BBB name="bbb"/></AAA>

7.count()函數(shù)可以計(jì)數(shù)所選元素的個(gè)數(shù)

(1)//*[count(BBB)=2],選擇含有2個(gè)BBB子元素的元素

<AAA>
    <CCC>
        <BBB/>
        <BBB/>
        <BBB/>
    </CCC>
    <DDD>返回這個(gè)元素        <BBB/>
        <BBB/>
    </DDD>
    <EEE>
        <CCC/>
        <DDD/>
    </EEE></AAA>

(2)//*[count(*)=2],選擇含有2個(gè)子元素的元素

<AAA>
    <CCC>
        <BBB/>
        <BBB/>
        <BBB/>
    </CCC>
    <DDD>返回這個(gè)元素        <BBB/>
        <BBB/>
    </DDD>
    <EEE>也返回這個(gè)元素        <CCC/>
        <DDD/>
    </EEE></AAA>

還有很多其他的語法,包括很多函數(shù)的應(yīng)用,用的不多,這里不做介紹


另外,上述介紹的幾點(diǎn)語法可以任意組合,比如下述的xml文檔:

<AAA>
    <BBB id="b1">
        <CCC>
            <KKK>k1</KKK>
        </CCC>
        <CCC>
            <KKK>k2</KKK>這個(gè)        </CCC>
    </BBB>
    <BBB id="b2"/>
    <BBB name="bbb"/></AAA>

假如我們現(xiàn)在要找AAA元素下面的第1個(gè)BBB子元素下面的第2CCC子元素的KKK子元素,則xpath路徑應(yīng)該這么寫:
/AAA/BBB[1]/CCC[2]/KKK

以上是“XML中XPATH語法的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI