首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要使用LINQ to XML查询来确定值吗?

我需要使用LINQ to XML查询来确定值吗?
EN

Stack Overflow用户
提问于 2011-09-15 15:11:27
回答 2查看 661关注 0票数 0
代码语言:javascript
复制
<?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)

我试过这段代码:

代码语言:javascript
复制
  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,
            };

但是没有得到正确的输出。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-15 15:18:20

我将使用:

代码语言:javascript
复制
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");

这是根据您的输入和预期输出进行的:

  • 查找所有匹配组
  • 查找这些组内的所有匹配子技能
  • 对于每个匹配子技能,查找父(技能)的名称
票数 2
EN

Stack Overflow用户

发布于 2011-09-15 17:05:55

我试着这样做,效果很好。

代码语言:javascript
复制
         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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7427098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档