旗下导航:搜·么
当前位置:网站首页 > XML教程 > 正文

XML—XPATH语法引见【XML教程】,XML,XPATH

作者:搜教程发布时间:2019-12-01分类:XML教程浏览:42评论:0


导读:为何须要xpath?在运用dom4j的时刻,我们不能跨层猎取某一个元素,必需一层一层去猎取,这就异常贫苦。所以为了我们更方便地接见某个节点,我们能够运用xpath手艺,它...


为何须要xpath?

在运用dom4j的时刻,我们不能跨层猎取某一个元素,必需一层一层去猎取,这就异常贫苦。
所以为了我们更方便地接见某个节点,我们能够运用xpath手艺,它能够让我们异常方便地读取到指定节点。

xpath一般连系dom4j合营运用,而且如果要运用xpath,则须要引入一个新的包jaxen-1.1-beta-6.jar

xpath的基础语法有以下几点:

1.基础的xpath语法相似于在一个文件体系中定位文件,如果途径以斜线/最先,那末该途径就示意到一个元素的绝对途径.

(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中运用xpath呢?实在很简单:

//1.获得SAXReader剖析器SAXReader saxReader = new SAXReader();
//2.指定去剖析哪一个文件Document document = saxReader.read(new File(path));
//3.能够运用xpath随心读取// document.selectNodes(args)返回多个元素
// document.selectSingleNode(args)返回单个元素List nodes = document.selectNodes("/AAA/BBB");

经由过程dom4j获得document对象后,能够运用document的selectNodes(args)要领,这个要领会依据你写的xpath途径返回一个List,余下的操纵就和dom4j相似了。

同时它也有一个selectSingleNode(args)要领,用于返回一个单个的Node。

下面继承引见其他的xpath语法:

2.如果途径以双斜线//开首,则示意文档中一切满足双斜线//以后划定规矩的元素(不管层级关联)

(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.星号*示意挑选一切由星号之前途径所定位的元素

(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个先人元素的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.方括号里的表达式能够进一步地指定元素,个中数字示意元素在挑选集里的位置,而last()函数则示意挑选集合的末了一个元素。迥殊要注重的是这里的下标是从1最先的,而不是0!
(1)/AAA/BBB[1],它示意挑选AAA的第一个BBB子元素

<AAA>
    <BBB/>这个    <BBB/>
    <BBB/>
    <BBB/></AAA>

(2)/AAA/BBB[last()],示意挑选AAA的末了一个BBB元素

<AAA>
    <BBB/>
    <BBB/>
    <BBB/>
    <BBB/>这个</AAA>

5.对属性的操纵

(1)//@id,挑选一切的id属性,注重:是把一切的id属性当作节点返回,而不是返回有id属性的节点。

<AAA>
    <BBB id="b1"/>返回这里的id属性节点    <BBB id="b2"/>也返回这里的id属性节点    <BBB name="bbb"/>
    <BBB/></AAA>

(2)//BBB[@id],挑选一切有id属性的BBB节点

<AAA>
    <BBB id="b1"/>返回这个BBB节点    <BBB id="b2"/>也返回这个BBB节点    <BBB name="bbb"/>
    <BBB/></AAA>

(3)//BBB[@name],挑选一切有name属性的BBB节点

<AAA>
    <BBB id="b1"/>
    <BBB id="b2"/>
    <BBB name="bbb"/>返回这个BBB节点    <BBB/></AAA>

(4)//BBB[@*],挑选一切有属性的BBB节点

<AAA>
    <BBB id="b1"/>返回这个BBB节点    <BBB id="b2"/>返回这个BBB节点    <BBB name="bbb"/>返回这个BBB节点    <BBB/></AAA>

(5)//BBB[not(@*)],挑选一切没有属性的BBB节点

<AAA>
    <BBB id="b1"/>
    <BBB id="b2"/>
    <BBB name="bbb"/>
    <BBB/>这个</AAA>

6.属性的值能够被用来作为挑选的原则

(1)//BBB[@id='b1'],挑选含有属性id且其值为’b1’的BBB元素

<AAA>
    <BBB id="b1"/>这个    <BBB name="bbb"/>
    <BBB name="bbb"/></AAA>

7.count()函数能够计数所选元素的个数

(1)//*[count(BBB)=2],挑选含有2个BBB子元素的元素

<AAA>
    <CCC>
        <BBB/>
        <BBB/>
        <BBB/>
    </CCC>
    <DDD>返回这个元素        <BBB/>
        <BBB/>
    </DDD>
    <EEE>
        <CCC/>
        <DDD/>
    </EEE></AAA>

(2)//*[count(*)=2],挑选含有2个子元素的元素

<AAA>
    <CCC>
        <BBB/>
        <BBB/>
        <BBB/>
    </CCC>
    <DDD>返回这个元素        <BBB/>
        <BBB/>
    </DDD>
    <EEE>也返回这个元素        <CCC/>
        <DDD/>
    </EEE></AAA>

另有许多其他的语法,包含许多函数的运用,用的不多,这里不做引见

别的,上述引见的几点语法能够恣意组合,比方下述的xml文档:

<AAA>
    <BBB id="b1">
        <CCC>
            <KKK>k1</KKK>
        </CCC>
        <CCC>
            <KKK>k2</KKK>这个        </CCC>
    </BBB>
    <BBB id="b2"/>
    <BBB name="bbb"/></AAA>

如果我们现在要找AAA元素下面的第1个BBB子元素下面的第2CCC子元素的KKK子元素,则xpath途径应当这么写:
/AAA/BBB[1]/CCC[2]/KKK

为何须要xpath?

在运用dom4j的时刻,我们不能跨层猎取某一个元素,必需一层一层去猎取,这就异常贫苦。
所以为了我们更方便地接见某个节点,我们能够运用xpath手艺,它能够让我们异常方便地读取到指定节点。

xpath一般连系dom4j合营运用,而且如果要运用xpath,则须要引入一个新的包jaxen-1.1-beta-6.jar

xpath的基础语法有以下几点:

1.基础的xpath语法相似于在一个文件体系中定位文件,如果途径以斜线/最先,那末该途径就示意到一个元素的绝对途径.

(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中运用xpath呢?实在很简单:

//1.获得SAXReader剖析器SAXReader saxReader = new SAXReader();
//2.指定去剖析哪一个文件Document document = saxReader.read(new File(path));
//3.能够运用xpath随心读取
// document.selectNodes(args)返回多个元素
// document.selectSingleNode(args)返回单个元素List nodes = document.selectNodes("/AAA/BBB");

经由过程dom4j获得document对象后,能够运用document的selectNodes(args)要领,这个要领会依据你写的xpath途径返回一个List,余下的操纵就和dom4j相似了。

同时它也有一个selectSingleNode(args)要领,用于返回一个单个的Node。

下面继承引见其他的xpath语法:

2.如果途径以双斜线//开首,则示意文档中一切满足双斜线//以后划定规矩的元素(不管层级关联)

(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.星号*示意挑选一切由星号之前途径所定位的元素

(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个先人元素的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.方括号里的表达式能够进一步地指定元素,个中数字示意元素在挑选集里的位置,而last()函数则示意挑选集合的末了一个元素。迥殊要注重的是这里的下标是从1最先的,而不是0!
(1)/AAA/BBB[1],它示意挑选AAA的第一个BBB子元素

<AAA>
    <BBB/>这个    <BBB/>
    <BBB/>
    <BBB/></AAA>

(2)/AAA/BBB[last()],示意挑选AAA的末了一个BBB元素

<AAA>
    <BBB/>
    <BBB/>
    <BBB/>
    <BBB/>这个</AAA>

5.对属性的操纵

(1)//@id,挑选一切的id属性,注重:是把一切的id属性当作节点返回,而不是返回有id属性的节点。

<AAA>
    <BBB id="b1"/>返回这里的id属性节点    <BBB id="b2"/>也返回这里的id属性节点    <BBB name="bbb"/>
    <BBB/></AAA>

(2)//BBB[@id],挑选一切有id属性的BBB节点

<AAA>
    <BBB id="b1"/>返回这个BBB节点    <BBB id="b2"/>也返回这个BBB节点    <BBB name="bbb"/>
    <BBB/></AAA>

(3)//BBB[@name],挑选一切有name属性的BBB节点

<AAA>
    <BBB id="b1"/>
    <BBB id="b2"/>
    <BBB name="bbb"/>返回这个BBB节点    <BBB/></AAA>

(4)//BBB[@*],挑选一切有属性的BBB节点

<AAA>
    <BBB id="b1"/>返回这个BBB节点    <BBB id="b2"/>返回这个BBB节点    <BBB name="bbb"/>返回这个BBB节点    <BBB/></AAA>

(5)//BBB[not(@*)],挑选一切没有属性的BBB节点

<AAA>
    <BBB id="b1"/>
    <BBB id="b2"/>
    <BBB name="bbb"/>
    <BBB/>这个</AAA>

6.属性的值能够被用来作为挑选的原则

(1)//BBB[@id='b1'],挑选含有属性id且其值为’b1’的BBB元素

<AAA>
    <BBB id="b1"/>这个    <BBB name="bbb"/>
    <BBB name="bbb"/></AAA>

7.count()函数能够计数所选元素的个数

(1)//*[count(BBB)=2],挑选含有2个BBB子元素的元素

<AAA>
    <CCC>
        <BBB/>
        <BBB/>
        <BBB/>
    </CCC>
    <DDD>返回这个元素        <BBB/>
        <BBB/>
    </DDD>
    <EEE>
        <CCC/>
        <DDD/>
    </EEE></AAA>

(2)//*[count(*)=2],挑选含有2个子元素的元素

<AAA>
    <CCC>
        <BBB/>
        <BBB/>
        <BBB/>
    </CCC>
    <DDD>返回这个元素        <BBB/>
        <BBB/>
    </DDD>
    <EEE>也返回这个元素        <CCC/>
        <DDD/>
    </EEE></AAA>

另有许多其他的语法,包含许多函数的运用,用的不多,这里不做引见

别的,上述引见的几点语法能够恣意组合,比方下述的xml文档:

<AAA>
    <BBB id="b1">
        <CCC>
            <KKK>k1</KKK>
        </CCC>
        <CCC>
            <KKK>k2</KKK>这个        </CCC>
    </BBB>
    <BBB id="b2"/>
    <BBB name="bbb"/></AAA>

如果我们现在要找AAA元素下面的第1个BBB子元素下面的第2CCC子元素的KKK子元素,则xpath途径应当这么写:
/AAA/BBB[1]/CCC[2]/KKK


以上就是XML——XPATH语法引见 的内容,更多相关内容请关注ki4网(www.ki4.cn)!

标签:XMLXPATH


欢迎 发表评论: