XML 示例
<cas:serviceResponse xmlns:cas='https://www.yale.edu/tp/cas'>
<cas:authenticationSuccess>
<cas:user>bb</cas:user>
<cas:attributes nid='1'>
<cas:loginname>bb</cas:loginname>
<cas:realname>bbggg</cas:realname>
</cas:attributes>
</cas:authenticationSuccess>
</cas:serviceResponse>
解析代碼
XDocument doc = XDocument.Parse(xmlString);
XNamespace ns = "https://www.yale.edu/tp/cas";
var auth = doc.Descendants(ns + "authenticationSuccess").FirstOrDefault();
if (auth != null) {
string loginName = (string)auth.Element(ns + "attributes").Element(ns + "loginname");
string realName = (string)auth.Element(ns + "attributes").Element(ns + "realname");
Console.WriteLine($"loginname: {loginName}, realname: {realName}");
}
關鍵點
- 定義 `XNamespace ns = "uri"`,查詢時 `ns + "localName"` 自動展開為 `{uri}localName`。
- `Descendants` 遞歸查找,`Element` 直接子元素。
- 轉型 `(string)element` 自動處理 null 返回 null。