<?xml version="1.0" encoding="utf-8" ?>
<MYROOT>
<Group name="G1">
<Skill name="G1Skill1">
<SubSkill>G1skill1sub1</SubSkill>
<SubSkill>G1skill1sub2</SubSkill>
</Skill >
<Skill name="G1Skill2">
<SubSkill>G1skill2sub1</SubSkill>
<SubSkill>G1skill2sub2</SubSkill>
</Skill >
</Group>
<Group name="G2">
<Skill name="G2Skill1">
<SubSkill>G2skill1sub1</SubSkill>
<SubSkill>G2skill1sub2</SubSkill>
</Skill >
<Skill name="G2Skill2">
<SubSkill>G2skill2sub1</SubSkill>
<SubSkill>G2skill2sub2</SubSkill>
</Skill >
</Group>
</MYROOT>
例如, 輸入是"G1"
& "G1skill1sub1"
我需要使用LINQ to XML查詢來確定值嗎?
預計輸出= G1Skill1
(使用單一的LINQ to XML)
我試過這段代碼:
var xmlDoc = XDocument.Load(Server.MapPath("XMLFile1.xml"));
var skills =
from skill in xmlDoc.Descendants("Group")
where skill.Attribute("name").Value.Equals("G1") // && skill.Element("SubSkill").Value.Equals("Group")
select new
{
Myskill = skill.Element("Skill").Value,
mytext= skill.Attribute("name").Value,
};
但沒有得到適當的輸出。
XPath是你的朋友。參見['XPathSelectElements'](http://msdn.microsoft.com/en-us/library/bb342176.aspx)和朋友。 – 2011-09-15 07:14:40
@pst:個人而言,我更喜歡直接使用LINQ到XML查詢表達式 - XPath讓我感到緊張,因爲您最終將代碼(「查找後代,比較相等」等和數據「G1」,「G1skill1sub1」等)結合起來。事實上,這只是一個字符串,也意味着沒有編譯時支持 - 最終只會出現語法錯誤,而這種錯誤只會在執行時顯示出來。 –
@Jon Skeet單元測試;-)我可以看到它如何*可能導致更多的錯誤機會,但我已經足夠咬了,只是忘記檢查一個屬性爲空之前使用或名稱錯誤,所以..這與一個更強大的LINQ提供者有點不同。 – 2011-09-15 07:38:08