XPath 和 LINQ to XML 的比較

2022-03-04 03:00:32 字數 3838 閱讀 7608

[譯自:

xpath

和linq to xml

的比較xpath

和linq to xml

提供了一些類似的功能。兩者可用於查詢返回元素的集合、

屬性的集合,集合的節點或元素或屬性的值作為這種結果的

xml

樹。但是,也有一些差異。

xpath

和linq

的差異xpath

不允許投影的新型別。它只可以從樹中,返回節點的集合,而

linq to xml

可以執行查詢和專案的物件圖或

xml

樹中乙個新的形狀。

linq to xml

查詢包含更多的功能,比

xpath

表示式的強大得多。

xpath

表示式字串存在於乙個單獨的區域,

c# 或

visual basic

編譯器不能幫助分析在編譯時的

xpath

表示式。與之相反,

linq to xml

查詢分析和編譯的

c# 或

visual basic

編譯器,能夠捕獲許多查詢錯誤。

xpath

的結果不是強型別的。在一些情況下,

xpath

表示式的計算結果是乙個物件,和它是由開發人員確定正確的型別,並強制轉換為所需的結果。與之相反,從

linq

**,以

xml

查詢是強型別的。

xpath 1.0

建議指出,

xpath

表示式的計算結果是無序。

然而,當遍歷

xml xpath

軸方法返回的

linq

的集合,按文件順序返回集合中的節點。這是訪問的

xpath

軸時,甚至謂詞的反向文件順序,如前和前乙個同級的表示在。

與之相反,大部分的

linq to xml

軸返回集合中按文件順序,但其中的兩個,

ancestors

和ancestorsandself

,以反向文件順序返回集合。下表列舉軸,並指示每個集合順序:

linq to xml軸運算

結果順序

xcontainer.descendantnodes

文件順序

xcontainer.descendants

文件順序

xcontainer.elements

文件順序

xcontainer.nodes

文件順序

xcontainer.nodesafterself

文件順序

xcontainer.nodesbeforeself

文件順序

xelement.ancestorsandself

反向文件順序

xelement.attributes

文件順序

xelement.descendantnodesandself

文件順序

xelement.descendantsandself

文件順序

xnode.ancestors

反向文件順序

xnode.elementsafterself

文件順序

xnode.elementsbeforeself

文件順序

xnode.nodesafterself

文件順序

xnode.nodesbeforeself

文件順序

位置謂詞

在xpath

表示式中很多軸的位置謂詞用文件順序表示,但反向文件順序用反向座標軸表示,是前輩

, 同輩、

祖先與祖先或自我的表達。例如,

xpath

表示式preceding-sibling::*[1]

返回前乙個同級。這是即使最終結果集顯示文件中的順序。

與之相反,

linq to xml

中的所有位置謂詞是始終表示的軸的順序。例如,

anelement.elementsbeforeself().tolist() [0]

返回查詢的元素,非直接的前乙個同級的父級的第乙個子元素。另乙個例子:

anelement.ancestors().tolist() [0]

返回父元素。

請注意,上面的方法實現整個集合。這不是最有效的方法編寫的查詢。它是以這種方式來演示該行為的位置謂詞。寫入相同的查詢更合適的方法是使用第一種方法,如下:

anelement.elementsbeforeself().first()

。如果您想要查詢的前乙個元素在

linq to xml

,您應編寫下面的表示式:

elementsbeforeself().last()

在linq to xml

中使用xpath

功能的xpath

查詢,其效能不如直接使用的

查詢。組成的比較

linq to xml

查詢的組成是基本相當於

xpath

表示式的組成,雖然有非常不同的語法。

例如,如果元素在變數命名為

customers

,與您要查詢命名為

companyname

的孫元素名稱下名為

customers

的所有子元素,則用如下所示編寫

xpath

表示式:

customers.xpathselectelements("./customer/companyname")

;there are similar parallels for each of the xpath axes.

xpath軸運算

linq to xml軸運算

child (the default axis)

xcontainer.elements

parent (..)

xobject.parent

attribute axis (@)

orxelement.attributes

xelement.attribute

ancestor axis

xnode.ancestors

ancestor-or-self axis

xelement.ancestorsandself

descendant axis (//)

orxcontainer.descendantnodes

xcontainer.descendants

descendant-or-self

orxelement.descendantnodesandself

xelement.descendantsandself

following-sibling

orxnode.nodesafterself

xnode.elementsafterself

preceding-sibling

orxnode.nodesbeforeself

xnode.elementsbeforeself

following

no direct equivalent.

preceding

no direct equivalent.

linq to xml for xpath users

LINQ to XML 學習總結

一 命名空間 system.xml.linq.dll程式集定義了三個命名空間 system.xml.linq,system.xml.schema 和 system.xml.xpath 最核心的是system.xml.linq,定義了對應 xml 文件個方面的很多態別 system.xml.linq成...

Linq to XML詳細操作

xelement root new xelement root new object new xelement stu new object new xelement stu new object new xelement stu new object new xelement stu new ob...

使用Linq to XML遍歷XML

using system using system.xml.linq using system.linq namespace class program console.writeline console.writeline 使用xelement遍歷 foreach xelement e inxel...