<?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
(XMLへの単一LINQを使用して)
ある私は、このコードを試してみました:
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)とお友達を参照してください。 –
@pst:個人的には、LINQ to XMLのクエリ式を直接使用する方が好きです。コードを組み合わせると、XPathは神経質になります(「子孫を見つけ、同等性を比較する」など、データ「G1」、「G1skill1sub1」など)。それが単なる文字列であるということは、コンパイル時のサポートもないことを意味します。実行時にのみ表示される構文エラーで終わるほうが簡単です。 –
@Jon Skeet Unit tests ;-)私はそれがどのようにして間違いの可能性につながるかを見ることができますが、使用前にnullの属性をチェックしたり、名前を間違って取得するのを忘れて、それは、より強く型付けされたLINQプロバイダとは少し異なります。 –