[譯自:
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...