<?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"
预期输出= 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,
};但是没有得到正确的输出。
发布于 2011-09-15 15:18:20
我将使用:
var skills = from group in doc.Descendants("Group")
where (string) group.Attribute("name") == "G1"
from subskill in group.Descendants("SubSkill")
where (string) subskill == "G1skill1sub1"
select (string) subskill.Parent.Attribute("name");这是根据您的输入和预期输出进行的:
发布于 2011-09-15 17:05:55
我试着这样做,效果很好。
string input1 = "G1";
string input2 = "G1skill1sub1";
string output =
(from skill in xdoc.Descendants("Skill")
let subskill = skill.Element("SubSkill")
let g = skill.Parent
where g.Name == "Group" && g.Attribute("name").Value == input1
&& subskill != null && subskill.Value == input2
select skill.Attribute("name").Value).FirstOrDefault();
Console.WriteLine(output);https://stackoverflow.com/questions/7427098
复制相似问题