Linq to XML同樣是對原C#訪問XML文件的方法的封裝,簡化了用xpath進行xml的查詢以及增加,修改,刪除xml元素的操作。
LINQ to XML 三個最重要類:XElement、XAttribute 和 XDocument。
首先我們先介紹這三個類的基本屬性和方法,然后再實現Linq to XML的 增刪改查。
1.XDocument
構造函數
名稱 | 說明 |
---|---|
XDocument() | 初始化 XDocument 類的新實例。 |
XDocument(Object[]) | 使用指定的內容初始化 XDocument 類的新實例。 |
XDocument(XDocument) | 從現有的 XDocument 對象初始化 XDocument 類的新實例。 |
XDocument(XDeclaration, Object[]) | 用指定的 XDeclaration 和內容初始化 XDocument 類的新實例。 |
屬性
名稱 | 說明 |
---|---|
BaseUri | 獲取此 XObject 的基 URI。 (繼承自 XObject。) |
Declaration | 獲取或設置此文檔的 XML 聲明。 |
Document | 獲取此 XObject 的 XDocument。 (繼承自 XObject。) |
DocumentType | 獲取此文檔的文檔類型定義 (DTD)。 |
FirstNode | 獲取此節點的第一個子節點。 (繼承自 XContainer。) |
LastNode | 獲取此節點的最后一個子節點。 (繼承自 XContainer。) |
NextNode | 獲取此節點的下一個同級節點。 (繼承自 XNode。) |
NodeType | 獲取此節點的節點類型。 (重寫 XObject.NodeType。) |
Parent | 獲取此 XObject 的父級 XElement。 (繼承自 XObject。) |
PreviousNode | 獲取此節點的上一個同級節點。 (繼承自 XNode。) |
Root | 獲取此文檔的 XML 樹的根元素。 |
方法
名稱 | 說明 |
---|---|
Add(Object) | 將指定的內容添加為此 XContainer 的子級。 (繼承自 XContainer。) |
Add(Object[]) | 將指定的內容添加為此 XContainer 的子級。 (繼承自 XContainer。) |
AddAfterSelf(Object) | 緊跟在此節點之后添加指定的內容。 (繼承自 XNode。) |
AddAfterSelf(Object[]) | 緊跟在此節點之后添加指定的內容。 (繼承自 XNode。) |
AddAnnotation | 將對象添加到此 XObject 的批注列表。 (繼承自 XObject。) |
AddBeforeSelf(Object) | 緊鄰此節點之前添加指定的內容。 (繼承自 XNode。) |
AddBeforeSelf(Object[]) | 緊鄰此節點之前添加指定的內容。 (繼承自 XNode。) |
AddFirst(Object) | 將指定的內容作為此文檔或元素的第一個子級添加。 (繼承自 XContainer。) |
AddFirst(Object[]) | 將指定的內容作為此文檔或元素的第一個子級添加。 (繼承自 XContainer。) |
Ancestors() | 返回此節點的上級元素的集合。 (繼承自 XNode。) |
Ancestors(XName) | 返回此節點的經過篩選的上級元素的集合。 集合中只包括具有匹配 XName 的元素。 (繼承自 XNode。) |
Annotation(Type) | 從此 XObject 獲取指定類型的第一個批注對象。 (繼承自 XObject。) |
Annotation<T>() | 從此 XObject 獲取指定類型的第一個批注對象。 (繼承自 XObject。) |
Annotations(Type) | 獲取此 XObject 的指定類型的批注集合。 (繼承自 XObject。) |
Annotations<T>() | 獲取此 XObject 的指定類型的批注集合。 (繼承自 XObject。) |
CreateReader() | 創建此節點的 XmlReader。 (繼承自 XNode。) |
CreateReader(ReaderOptions) | 使用 readerOptions 參數指定的選項創建 XmlReader。 (繼承自 XNode。) |
CreateWriter | 創建可用於將節點添加至 XContainer 的 XmlWriter。 (繼承自 XContainer。) |
DescendantNodes | 按文檔順序返回此文檔或元素的子代節點集合。 (繼承自 XContainer。) |
Descendants() | 按文檔順序返回此文檔或元素的子代元素集合。 (繼承自 XContainer。) |
Descendants(XName) | 按文檔順序返回此文檔或元素的經過篩選的子代元素集合。 集合中只包括具有匹配 XName 的元素。 (繼承自XContainer。) |
Element | 獲取具有指定 XName 的第一個(按文檔順序)子元素。 (繼承自 XContainer。) |
Elements() | 按文檔順序返回此元素或文檔的子元素集合。 (繼承自 XContainer。) |
Elements(XName) | 按文檔順序返回此元素或文檔的經過篩選的子元素集合。 集合中只包括具有匹配 XName 的元素。 (繼承自XContainer。) |
ElementsAfterSelf() | 按文檔順序返回此節點后的同級元素集合。 (繼承自 XNode。) |
ElementsAfterSelf(XName) | 按文檔順序返回此節點后經過篩選的同級元素的集合。 集合中只包括具有匹配 XName 的元素。 (繼承自 XNode。) |
ElementsBeforeSelf() | 按文檔順序返回此節點前的同級元素集合。 (繼承自 XNode。) |
ElementsBeforeSelf(XName) | 按文檔順序返回此節點前經過篩選的同級元素的集合。 集合中只包括具有匹配 XName 的元素。 (繼承自 XNode。) |
Equals(Object) | 確定指定的對象是否等於當前對象。 (繼承自 Object。) |
Finalize | 允許對象在“垃圾回收”回收之前嘗試釋放資源並執行其他清理操作。 (繼承自 Object。) |
GetHashCode | 作為默認哈希函數。 (繼承自 Object。) |
GetType | 獲取當前實例的 Type。 (繼承自 Object。) |
IsAfter | 確定當前節點是否按文檔順序顯示在指定節點之后。 (繼承自 XNode。) |
IsBefore | 確定當前節點是否按文檔順序顯示在指定節點之前。 (繼承自 XNode。) |
Load(Stream) | 使用指定的流創建一個新的 XDocument 實例。 |
Load(String) | 從文件創建新 XDocument。 |
Load(TextReader) | 從 TextReader 創建新的 XDocument。 |
Load(XmlReader) | 從 XmlReader 創建新 XDocument。 |
Load(Stream, LoadOptions) | 使用指定流創建新的 XDocument 實例,也可以選擇保留空白,設置基 URI 和保留行信息。 |
Load(String, LoadOptions) | 從文件創建新 XDocument,還可以選擇保留空白和行信息以及設置基 URI。 |
Load(TextReader, LoadOptions) | 從 TextReader 創建新 XDocument,還可以選擇保留空白和行信息以及設置基 URI。 |
Load(XmlReader, LoadOptions) | 從 XmlReader 加載 XDocument,還可以選擇設置基 URI 和保留行信息。 |
MemberwiseClone | 創建當前 Object 的淺表副本。 (繼承自 Object。) |
Nodes | 按文檔順序返回此元素或文檔的子節點集合。 (繼承自 XContainer。) |
NodesAfterSelf | 按文檔順序返回此節點后的同級節點的集合。 (繼承自 XNode。) |
NodesBeforeSelf | 按文檔順序返回此節點前的同級節點的集合。 (繼承自 XNode。) |
Parse(String) | 從字符串創建新 XDocument。 |
Parse(String, LoadOptions) | 從字符串創建新 XDocument,還可以選擇保留空白和行信息以及設置基 URI。 |
Remove | 從節點父級中刪除此節點。 (繼承自 XNode。) |
RemoveAnnotations(Type) | 從此 XObject 移除指定類型的批注。 (繼承自 XObject。) |
RemoveAnnotations<T>() | 從此 XObject 移除指定類型的批注。 (繼承自 XObject。) |
RemoveNodes | 從此文檔或元素中移除子節點。 (繼承自 XContainer。) |
ReplaceNodes(Object) | 使用指定的內容替換此文檔或元素的子節點。 (繼承自 XContainer。) |
ReplaceNodes(Object[]) | 使用指定的內容替換此文檔或元素的子節點。 (繼承自 XContainer。) |
ReplaceWith(Object) | 使用指定的內容替換此節點。 (繼承自 XNode。) |
ReplaceWith(Object[]) | 使用指定的內容替換此節點。 (繼承自 XNode。) |
Save(Stream) | 將此 XDocument 輸出到指定的 Stream。 |
Save(String) | 序列化此 XDocument 到文件,如果該文件存在,則覆蓋現有的文件。 |
Save(TextWriter) | 將此 XDocument 序列化為 TextWriter。 |
Save(XmlWriter) | 將此 XDocument 序列化為 XmlWriter。 |
Save(Stream, SaveOptions) | 將此 XDocument 輸出到指定的 Stream,(可選)並指定格式設置行為。 |
Save(String, SaveOptions) | 將此 XDocument 序列化為文件,還可以選擇禁用格式設置。 |
Save(TextWriter, SaveOptions) | 將此 XDocument 序列化為 TextWriter,還可以選擇禁用格式設置。 |
ToString() | 返回此節點的縮進 XML。 (繼承自 XNode。) |
ToString(SaveOptions) | 返回此節點的 XML,還可以選擇禁用格式設置。 (繼承自 XNode。) |
WriteTo | 將此文檔寫入 XmlWriter。 (重寫 XNode.WriteTo(XmlWriter)。) |
2.XElement
構造函數
名稱 | 說明 |
---|---|
XElement(XElement) | 從其他 XElement 對象初始化 XElement 類的新實例。 |
XElement(XName) | 用指定的名稱初始化 XElement 類的新實例。 |
XElement(XStreamingElement) | 從 XStreamingElement 對象初始化 XElement 類的新實例。 |
XElement(XName, Object) | 用指定的名稱和內容初始化 XElement 類的新實例。 |
XElement(XName, Object[]) | 用指定的名稱和內容初始化 XElement 類的新實例。 |
屬性
名稱 | 說明 |
---|---|
BaseUri | 獲取此 XObject 的基 URI。 (繼承自 XObject。) |
Document | 獲取此 XObject 的 XDocument。 (繼承自 XObject。) |
EmptySequence | 獲取空的元素集合。 |
FirstAttribute | 獲取此元素的第一個屬性。 |
FirstNode | 獲取此節點的第一個子節點。 (繼承自 XContainer。) |
HasAttributes | 獲取一個值,該值指示此元素是否至少具有一個屬性。 |
HasElements | 獲取一個值,該值指示此元素是否至少具有一個子元素。 |
IsEmpty | 獲取一個值,該值指示此元素是否不包含內容。 |
LastAttribute | 獲取此元素的最后一個屬性。 |
LastNode | 獲取此節點的最后一個子節點。 (繼承自 XContainer。) |
Name | 獲取或設置此元素的名稱。 |
NextNode | 獲取此節點的下一個同級節點。 (繼承自 XNode。) |
NodeType | 獲取此節點的節點類型。 (重寫 XObject.NodeType。) |
Parent | 獲取此 XObject 的父級 XElement。 (繼承自 XObject。) |
PreviousNode | 獲取此節點的上一個同級節點。 (繼承自 XNode。) |
Value | 獲取或設置此元素的串連文本內容。 |
方法
名稱 | 說明 |
---|---|
Add(Object) | 將指定的內容添加為此 XContainer 的子級。 (繼承自 XContainer。) |
Add(Object[]) | 將指定的內容添加為此 XContainer 的子級。 (繼承自 XContainer。) |
AddAfterSelf(Object) | 緊跟在此節點之后添加指定的內容。 (繼承自 XNode。) |
AddAfterSelf(Object[]) | 緊跟在此節點之后添加指定的內容。 (繼承自 XNode。) |
AddAnnotation | 將對象添加到此 XObject 的批注列表。 (繼承自 XObject。) |
AddBeforeSelf(Object) | 緊鄰此節點之前添加指定的內容。 (繼承自 XNode。) |
AddBeforeSelf(Object[]) | 緊鄰此節點之前添加指定的內容。 (繼承自 XNode。) |
AddFirst(Object) | 將指定的內容作為此文檔或元素的第一個子級添加。 (繼承自 XContainer。) |
AddFirst(Object[]) | 將指定的內容作為此文檔或元素的第一個子級添加。 (繼承自 XContainer。) |
Ancestors() | 返回此節點的上級元素的集合。 (繼承自 XNode。) |
Ancestors(XName) | 返回此節點的經過篩選的上級元素的集合。 集合中只包括具有匹配 XName 的元素。 (繼承自 XNode。) |
AncestorsAndSelf() | 返回元素集合,其中包含此元素及其上級。 |
AncestorsAndSelf(XName) | 返回經過篩選的元素集合,其中包含此元素及其上級。 集合中只包括具有匹配 XName 的元素。 |
Annotation(Type) | 從此 XObject 獲取指定類型的第一個批注對象。 (繼承自 XObject。) |
Annotation<T>() | 從此 XObject 獲取指定類型的第一個批注對象。 (繼承自 XObject。) |
Annotations(Type) | 獲取此 XObject 的指定類型的批注集合。 (繼承自 XObject。) |
Annotations<T>() | 獲取此 XObject 的指定類型的批注集合。 (繼承自 XObject。) |
Attribute | 返回具有指定 XName 的此 XElement 的 XAttribute。 |
Attributes() | 返回此元素的屬性集合。 |
Attributes(XName) | 返回經過篩選的此元素的屬性集合。 集合中只包括具有匹配 XName 的元素。 |
CreateReader() | 創建此節點的 XmlReader。 (繼承自 XNode。) |
CreateReader(ReaderOptions) | 使用 readerOptions 參數指定的選項創建 XmlReader。 (繼承自 XNode。) |
CreateWriter | 創建可用於將節點添加至 XContainer 的 XmlWriter。 (繼承自 XContainer。) |
DescendantNodes | 按文檔順序返回此文檔或元素的子代節點集合。 (繼承自 XContainer。) |
DescendantNodesAndSelf | 返回節點的集合,而這些節點包含此元素以及此元素的所有子代節點,並將它們按文檔順序排列。 |
Descendants() | 按文檔順序返回此文檔或元素的子代元素集合。 (繼承自 XContainer。) |
Descendants(XName) | 按文檔順序返回此文檔或元素的經過篩選的子代元素集合。 集合中只包括具有匹配 XName 的元素。 (繼承自XContainer。) |
DescendantsAndSelf() | 返回元素的集合,而這些元素包含此元素以及此元素的所有子代元素,並按文檔順序排列它們。 |
DescendantsAndSelf(XName) | 返回經過篩選的元素集合,這些元素包含此元素以及此元素的所有子代元素,並按文檔順序排列它們。 集合中只包括具有匹配 XName 的元素。 |
Element | 獲取具有指定 XName 的第一個(按文檔順序)子元素。 (繼承自 XContainer。) |
Elements() | 按文檔順序返回此元素或文檔的子元素集合。 (繼承自 XContainer。) |
Elements(XName) | 按文檔順序返回此元素或文檔的經過篩選的子元素集合。 集合中只包括具有匹配 XName 的元素。 (繼承自XContainer。) |
ElementsAfterSelf() | 按文檔順序返回此節點后的同級元素集合。 (繼承自 XNode。) |
ElementsAfterSelf(XName) | 按文檔順序返回此節點后經過篩選的同級元素的集合。 集合中只包括具有匹配 XName 的元素。 (繼承自 XNode。) |
ElementsBeforeSelf() | 按文檔順序返回此節點前的同級元素集合。 (繼承自 XNode。) |
ElementsBeforeSelf(XName) | 按文檔順序返回此節點前經過篩選的同級元素的集合。 集合中只包括具有匹配 XName 的元素。 (繼承自 XNode。) |
Equals(Object) | 確定指定的對象是否等於當前對象。 (繼承自 Object。) |
Finalize | 允許對象在“垃圾回收”回收之前嘗試釋放資源並執行其他清理操作。 (繼承自 Object。) |
GetDefaultNamespace | 獲取此 XElement 的默認 XNamespace。 |
GetHashCode | 作為默認哈希函數。 (繼承自 Object。) |
GetNamespaceOfPrefix | 獲取此 XElement 的與特定前綴關聯的命名空間。 |
GetPrefixOfNamespace | 獲取與此 XElement 的命名空間關聯的前綴。 |
GetType | 獲取當前實例的 Type。 (繼承自 Object。) |
IsAfter | 確定當前節點是否按文檔順序顯示在指定節點之后。 (繼承自 XNode。) |
IsBefore | 確定當前節點是否按文檔順序顯示在指定節點之前。 (繼承自 XNode。) |
Load(Stream) | 使用指定的流創建一個新的 XElement 實例。 |
Load(String) | 從文件加載 XElement。 |
Load(TextReader) | 從 TextReader 加載 XElement。 |
Load(XmlReader) | 從 XmlReader 加載 XElement。 |
Load(Stream, LoadOptions) | 使用指定流創建新的 XElement 實例,也可以選擇保留空白,設置基 URI 和保留行信息。 |
Load(String, LoadOptions) | 從文件加載 XElement,還可以選擇保留空白、設置基 URI 和保留行信息。 |
Load(TextReader, LoadOptions) | 從 TextReader 加載 XElement,還可以選擇保留空白和行信息。 |
Load(XmlReader, LoadOptions) | 從 XmlReader 加載 XElement 時,可以選擇保留空白、設置基 URI 和保留行信息。 |
MemberwiseClone | 創建當前 Object 的淺表副本。 (繼承自 Object。) |
Nodes | 按文檔順序返回此元素或文檔的子節點集合。 (繼承自 XContainer。) |
NodesAfterSelf | 按文檔順序返回此節點后的同級節點的集合。 (繼承自 XNode。) |
NodesBeforeSelf | 按文檔順序返回此節點前的同級節點的集合。 (繼承自 XNode。) |
Parse(String) | 從包含 XML 的字符串加載 XElement。 |
Parse(String, LoadOptions) | 從包含 XML 的字符串加載 XElement,還可以選擇保留空白和行信息。 |
Remove | 從節點父級中刪除此節點。 (繼承自 XNode。) |
RemoveAll | 從此 XElement 中移除節點和屬性。 |
RemoveAnnotations(Type) | 從此 XObject 移除指定類型的批注。 (繼承自 XObject。) |
RemoveAnnotations<T>() | 從此 XObject 移除指定類型的批注。 (繼承自 XObject。) |
RemoveAttributes | 移除此 XElement 的屬性。 |
RemoveNodes | 從此文檔或元素中移除子節點。 (繼承自 XContainer。) |
ReplaceAll(Object) | 使用指定的內容替換此元素的子節點和屬性。 |
ReplaceAll(Object[]) | 使用指定的內容替換此元素的子節點和屬性。 |
ReplaceAttributes(Object) | 使用指定的內容替換此元素的屬性。 |
ReplaceAttributes(Object[]) | 使用指定的內容替換此元素的屬性。 |
ReplaceNodes(Object) | 使用指定的內容替換此文檔或元素的子節點。 (繼承自 XContainer。) |
ReplaceNodes(Object[]) | 使用指定的內容替換此文檔或元素的子節點。 (繼承自 XContainer。) |
ReplaceWith(Object) | 使用指定的內容替換此節點。 (繼承自 XNode。) |
ReplaceWith(Object[]) | 使用指定的內容替換此節點。 (繼承自 XNode。) |
Save(Stream) | 將此 XElement 輸出到指定的 Stream。 |
Save(String) | 將此元素序列化為文件。 |
Save(TextWriter) | 將此元素序列化為 TextWriter。 |
Save(XmlWriter) | 將此元素序列化為 XmlWriter。 |
Save(Stream, SaveOptions) | 將此 XElement 輸出到指定的 Stream,(可選)並指定格式設置行為。 |
Save(String, SaveOptions) | 將此元素序列化為文件,並可以選擇禁用格式設置。 |
Save(TextWriter, SaveOptions) | 將此元素序列化為 TextWriter,並可以選擇禁用格式設置。 |
SetAttributeValue | 設置屬性的值、添加屬性或移除屬性。 |
SetElementValue | 設置子元素的值、添加子元素或移除子元素。 |
SetValue | 設置此元素的值。 |
ToString() | 返回此節點的縮進 XML。 (繼承自 XNode。) |
ToString(SaveOptions) | 返回此節點的 XML,還可以選擇禁用格式設置。 (繼承自 XNode。) |
WriteTo | 將此元素寫入 XmlWriter。 (重寫 XNode.WriteTo(XmlWriter)。) |
3.XAttribute
構造函數
名稱 | 說明 |
---|---|
XAttribute(XAttribute) | 從其他 XAttribute 對象初始化 XAttribute 類的新實例。 |
XAttribute(XName, Object) | 從指定的名稱和值初始化 XAttribute 類的新實例。 |
屬性
名稱 | 說明 |
---|---|
BaseUri | 獲取此 XObject 的基 URI。 (繼承自 XObject。) |
Document | 獲取此 XObject 的 XDocument。 (繼承自 XObject。) |
EmptySequence | 獲取空的屬性集合。 |
IsNamespaceDeclaration | 確定此屬性是否為命名空間聲明。 |
Name | 獲取此屬性 (Attribute) 的展開名稱。 |
NextAttribute | 獲取父元素的下一個屬性 (Attribute)。 |
NodeType | 獲取此節點的節點類型。 (重寫 XObject.NodeType。) |
Parent | 獲取此 XObject 的父級 XElement。 (繼承自 XObject。) |
PreviousAttribute | 獲取父元素的上一個屬性 (Attribute)。 |
Value | 獲取或設置此屬性的值。 |
方法
名稱 | 說明 |
---|---|
AddAnnotation | 將對象添加到此 XObject 的批注列表。 (繼承自 XObject。) |
Annotation(Type) | 從此 XObject 獲取指定類型的第一個批注對象。 (繼承自 XObject。) |
Annotation<T>() | 從此 XObject 獲取指定類型的第一個批注對象。 (繼承自 XObject。) |
Annotations(Type) | 獲取此 XObject 的指定類型的批注集合。 (繼承自 XObject。) |
Annotations<T>() | 獲取此 XObject 的指定類型的批注集合。 (繼承自 XObject。) |
Equals(Object) | 確定指定的對象是否等於當前對象。 (繼承自 Object。) |
Finalize | 允許對象在“垃圾回收”回收之前嘗試釋放資源並執行其他清理操作。 (繼承自 Object。) |
GetHashCode | 作為默認哈希函數。 (繼承自 Object。) |
GetType | 獲取當前實例的 Type。 (繼承自 Object。) |
MemberwiseClone | 創建當前 Object 的淺表副本。 (繼承自 Object。) |
Remove | 從此屬性的父元素中移除它。 |
RemoveAnnotations(Type) | 從此 XObject 移除指定類型的批注。 (繼承自 XObject。) |
RemoveAnnotations<T>() | 從此 XObject 移除指定類型的批注。 (繼承自 XObject。) |
SetValue | 設置此屬性的值。 |
ToString | 將當前的 XAttribute 對象轉換為字符串表示形式。 (重寫 Object.ToString()。) |
簡單示例
1.創建XML
XDocument doc = new XDocument( ///創建XDocument類的實例 new XDeclaration("1.0", "utf-8", "yes"),///XML的聲明,包括版本,編碼,xml文件是否獨立 new XElement("Books", ///添加根節點 new XElement("Book", ///添加一個節點 new XAttribute("BookID", "001"),///添加屬性BookID new XElement("BookNo", "0001"), ///添加元素BookNo new XElement("BookName", "Book 0001"),///添加元素BookName new XElement("BookPrice", "40"),///添加元素BookPrice new XElement("BookRemark", "This is a book 0001")///添加元素BookRemark ) ) ); ///保存XML文件到指定地址 doc.Save(@"C:\Books.xml");
2.添加元素
///導入XML文件 XElement xe = XElement.Load(@"C:\Books.xml"); ///創建一個新節點 XElement book1 = new XElement("Book", new XAttribute("BookID", "002"), new XElement("BookNo", "0002"), new XElement("BookName", "Book 0002"), new XElement("BookPrice", "50"), new XElement("BookRemark", "This is a book 0002") ); ///添加節點到XML文件中,並保存 xe.Add(book1); ///創建一個新節點 XElement book2 = new XElement("Book", new XAttribute("BookID", "003"), new XElement("BookNo", "0003"), new XElement("BookName", "Book 0003"), new XElement("BookPrice", "30"), new XElement("BookRemark", "This is a book 0003") ); ///添加節點到XML文件中,並保存 xe.Add(book2); ///創建一個新節點 XElement book3 = new XElement("Book", new XAttribute("BookID", "004"), new XElement("BookNo", "0004"), new XElement("BookName", "Book 0004"), new XElement("BookPrice", "60"), new XElement("BookRemark", "This is a book 0004") ); ///添加節點到XML文件中 xe.Add(book3); ///保存到XML文件中 xe.Save(@"C:\Books.xml");
3.修改元素
XElement xe = XElement.Load(@"C:\Books.xml"); ///查詢修改的元素 IEnumerable<XElement> element = from e in xe.Elements("Book") where e.Attribute("BookID").Value == "xxx" //xxx指定的修改元素 select e; ///修改元素 if (element.Count() > 0) { XElement firstelement = element.First(); ///設置新的屬性 firstelement.SetAttributeValue("BookID", "new004"); ///替換成新的節點 firstelement.ReplaceNodes( new XElement("BookNo", "new0004"), new XElement("BookName", "Book new0004"), new XElement("BookPrice", "45"), new XElement("BookRemark", "This is a book new0004") ); } xe.Save(@"C:\Books.xml");
4.刪除元素
XElement xe = XElement.Load(@"C:\Books.xml"); ///查詢修改的元素 IEnumerable<XElement> element = from e in xe.Elements("Book") where e.Attribute("BookID").Value == "xxx" //xxx 指定刪除元素 select e; ///修改元素 if (element.Count() > 0) { XElement firstelement = element.First(); ///刪除此元素的所有節點和屬性 firstelement.RemoveAll(); ///刪除此元素的屬性 //firstelement.RemoveAttributes(); ///刪除此元素的子節點 //firstelement.RemoveNodes(); } xe.Save(@"C:\Books.xml");
5.一些常用查詢
XElement xe = XElement.Load(@"C:\Books.xml"); //查詢元素並排序 var elements = xe.Elements("Book") .Where(e => Convert.ToInt32(e.Attribute("BookID").Value.Substring(e.Attribute("BookID").Value.Length - 1, 1)) > 1) .OrderByDescending(e => (string)e.Element("BookName")) .ToList(); //查詢指定元素的子元素 var elements = xe.Elements("Book") .Descendants("xxx") //xxx 指定元素 .ToList(); //查詢指定屬性的元素 var eAttribute = xe.Elements("Book") .Where(e => (string)e.Attribute("BookID") == "xxx") //xxx 指定屬性 .OrderBy(e => e.Element("BookID")) .ToList(); //查詢指定名稱的元素 var elements = xe.Elements("Book") .Where(e => (string)e.Element("BookName") == "xxx") //指定元素名稱 .OrderBy(e => e.Element("BookID")) .ToList();
到這里結束了,現在感覺LINQ to XML 是不是很簡單啊,相信你會喜歡上Linq語法的。
本文只着重介紹了LINQ to XML 類的 XElement、XAttribute和XDocument三個類,當然還有其他的一些,這里就不作詳細介紹了,如需查看請點此跳轉到MSDN LINQ to XML 類概述。
感謝您的閱讀,如有任何建議請評論提出。
感覺還不錯,請推薦下,謝謝。