System.Xml.Linq 命名空間提供 XDocument、XElement、XAttribute、XText 等類別,讓 XML 操作比傳統 XmlDocument 更直觀、更符合 LINQ 風格。
var xDoc = new XDocument(
new XElement("root",
new XElement("dog",
new XText("dog said black is a beautify color"),
new XAttribute("color", "black")),
new XElement("cat"),
new XElement("pig", "pig is great")
)
);
// 輸出預設縮排、預設編碼 (繁體中文系統為 Big5/UTF-8)
xDoc.Save(Console.Out);
輸出結果:
<?xml version="1.0" encoding="utf-8"?>
<root>
<dog color="black">dog said black is a beautify color</dog>
<cat />
<pig>pig is great</pig>
</root>
var query = from item in xDoc.Element("root").Elements()
select new {
TypeName = item.Name.LocalName,
Saying = item.Value,
Color = item.Attribute("color")?.Value ?? "Unknown"
};
foreach (var item in query) {
Console.WriteLine($"{item.TypeName} 's color is {item.Color}, {item.TypeName} said {item.Saying}");
}
<%@ Page Language="C#" %>
<script runat="server">
protected override void OnLoad(EventArgs e) {
var rss = XDocument.Load("https://www.cnblogs.com/rss"); // 範例 RSS
var blogs = (from item in rss.Descendants("item")
select new {
Title = item.Element("title")?.Value,
Url = item.Element("link")?.Value,
Date = DateTime.Parse(item.Element("pubDate")?.Value)
}).Take(10);
repeaterBlogs.DataSource = blogs;
repeaterBlogs.DataBind();
base.OnLoad(e);
}
</script>
<asp:Repeater ID="repeaterBlogs" runat="server">
<ItemTemplate>
<li><a href="<%# Eval("Url") %>"><%# Eval("Title") %></a>
<span><%# Eval("Date", "{0:yyyy-MM-dd}") %></span></li>
</ItemTemplate>
</asp:Repeater>
| 類別 | 用途 |
|---|---|
| XDocument | 代表完整 XML 文件,支援 Load/Save |
| XElement | 代表 XML 元素,可巢狀建構樹狀結構 |
| XAttribute | 代表屬性,附掛於 XElement |
| XText | 代表文字節點內容 |
Elements() / Elements(name):取得直接子元素Descendants() / Descendants(name):遞迴取得所有後代元素Attribute(name):取得指定屬性Value:取得元素文字內容 (含子元素文字)