XObject (抽象基類,提供批註與事件) ├── XNode (抽象,樹節點) │ ├── XContainer (抽象,可含子節點) │ │ ├── XElement (XML 元素,核心類別) │ │ └── XDocument (XML 文件) │ ├── XText (文字節點) │ ├── XComment (註解) │ ├── XProcessingInstruction (處理指令) │ └── XDocumentType (DTD) └── XAttribute (屬性,非節點,不屬於樹結構)
| 類別 | 用途 |
|---|---|
XElement | 核心類別,表示 XML 元素,支援建構、查詢、修改、序列化,可直接作為樹根 |
XDocument | 表示完整 XML 文件,含宣告、處理指令、註解,僅能有一個根 XElement |
XAttribute | 表示屬性,名稱由 XName 定義 |
XName / XNamespace | 簡化 XML 名稱處理:自動解析前綴,預設使用預設命名空間序列化 |
XDeclaration | XML 宣告(版本、編碼、standalone) |
XComment / XProcessingInstruction / XDocumentType | 對應註解、處理指令、DTD |
XCData | CDATA 區段 |
大多數情境下,直接使用 XElement 即可:建構樹、新增子樹、修改、儲存。只有需要文件層級資訊(宣告、處理指令、文件層級註解)時才建立 XDocument。
XElement contacts = new XElement("Contacts",
new XElement("Contact",
new XElement("Name", "Patrick Hines"),
new XElement("Phone", "206-555-0144", new XAttribute("Type", "Home")),
new XElement("Phone", "425-555-0145", new XAttribute("Type", "Work")),
new XElement("Address",
new XElement("Street1", "123 Main St"),
new XElement("City", "Mercer Island"),
new XElement("State", "WA"),
new XElement("Postal", "68042")
)
)
);
程式碼縮進直接反映 XML 階層,極具可讀性。
XElement srcTree = new XElement("Root",
new XElement("Element", 1), new XElement("Element", 2),
new XElement("Element", 3), new XElement("Element", 4), new XElement("Element", 5)
);
XElement xmlTree = new XElement("Root",
new XElement("Child", 1), new XElement("Child", 2),
from el in srcTree.Elements() where (int)el > 2 select el
);
// 輸出: Child1, Child2, Element3, Element4, Element5
XDocument d = new XDocument(
new XComment("This is a comment."),
new XProcessingInstruction("xml-stylesheet", "href='mystyle.css' title='Compact' type='text/css'"),
new XElement("Pubs",
new XElement("Book",
new XElement("Title", "Artifacts of Roman Civilization"),
new XElement("Author", "Moreno, Jordao")
),
new XElement("Book",
new XElement("Title", "Midieval Tools and Implements"),
new XElement("Author", "Gazit, Inbar")
)
),
new XComment("This is another comment.")
);
d.Declaration = new XDeclaration("1.0", "utf-8", "true");
d.Save("test.xml");
XElement 可與 XmlReader、XmlWriter、XslCompiledTransform 互通:
CreateReader() 產生 XmlReader 讀取樹內容。CreateWriter() 產生 XmlWriter 填充樹。ReadFrom(reader) 從 XmlReader 載入。XslCompiledTransform.Transform 執行 XSLT。預設自動分配前綴或使用預設命名空間。若需精確控制(如 XSLT/XAML 相容),可使用 GetPrefixOfNamespace 或序列化時指定。