C# 基于属性的XML Get元素

C# 基于属性的XML Get元素,c#,xml,xelement,C#,Xml,Xelement,谁能帮帮我吗。我不熟悉XML和xElement。 如何获得2013年的男性人数?结果应该是300 我有以下XML: <company> <department> <departmentname>Dep 1</departmentname> <year id = "2012"> <men>200</men> <women>1000</women>

谁能帮帮我吗。我不熟悉XML和xElement。 如何获得2013年的男性人数?结果应该是300

我有以下XML:

<company>
  <department>
    <departmentname>Dep 1</departmentname>
    <year id = "2012">
      <men>200</men>
      <women>1000</women>
    </year>
    <year id = "2013">
      <men>300</men>
      <women>400</women>
    </year>
  </department>
</company>

副处长1
200
1000
300
400
我有以下代码(不工作):

XElement company=XElement.Load(Server.MapPath(myXML.xml));
var men=(来自公司内部要素(“部门”)。要素(“年度”)
其中(字符串)a.Attribute(“id”).Value==“2013”
选择(字符串)(a.Element(“men”)).ToList();

假设您希望所有部门都提供

int mens=company.Descendants("year")
                .Where(x=>x.Attribute("id").Value=="2013")
                .Sum(x=>int.Parse(x.Element("men").Value));

您的查询应该是

int men = (from a in company.Elements("department").Elements("year")
           where a.Attribute("id").Value == "2013"
           select int.Parse(a.Element("men").Value)).Sum();

假设你想从所有部门得到它

int mens=company.Descendants("year")
                .Where(x=>x.Attribute("id").Value=="2013")
                .Sum(x=>int.Parse(x.Element("men").Value));

您的查询应该是

int men = (from a in company.Elements("department").Elements("year")
           where a.Attribute("id").Value == "2013"
           select int.Parse(a.Element("men").Value)).Sum();
不是很强大,但会在你的情况下工作,你应该得到的想法

使用LINQ语法而不是扩展方法:

var txt =
    (from c in company.Descendants("men")
     where c.Parent.Attribute("id").Value == "2013"
     select c).First().Value;
不是很强大,但会在你的情况下工作,你应该得到的想法

使用LINQ语法而不是扩展方法:

var txt =
    (from c in company.Descendants("men")
     where c.Parent.Attribute("id").Value == "2013"
     select c).First().Value;

使用XPath怎么样

var xmldoc = XDocument.Parse(@"<?xml version='1.0' encoding='utf-8'?>
    <company>
      <department>
        <departmentname>Dep 1</departmentname>
        <year id = '2012'>
          <men>200</men>
          <women>1000</women>
        </year>
        <year id = '2013'>
          <men>300</men>
          <women>400</women>
        </year>
      </department>
    </company>");

Console.WriteLine(
    xmldoc.XPathSelectElement(
            "/company/department/year[@id='2013']/men").Value);
var xmldoc=XDocument.Parse(@)
副处长1
200
1000
300
400
");
控制台写入线(
xmldoc.XPathSelectElement(
“/company/department/year[@id='2013']/men”)。价值);

使用XPath怎么样

var xmldoc = XDocument.Parse(@"<?xml version='1.0' encoding='utf-8'?>
    <company>
      <department>
        <departmentname>Dep 1</departmentname>
        <year id = '2012'>
          <men>200</men>
          <women>1000</women>
        </year>
        <year id = '2013'>
          <men>300</men>
          <women>400</women>
        </year>
      </department>
    </company>");

Console.WriteLine(
    xmldoc.XPathSelectElement(
            "/company/department/year[@id='2013']/men").Value);
var xmldoc=XDocument.Parse(@)
副处长1
200
1000
300
400
");
控制台写入线(
xmldoc.XPathSelectElement(
“/company/department/year[@id='2013']/men”)。价值);

好的,伙计们。我用过这个,它很管用 谢谢你的帮助

 XElement com = (from p in company.Elements("department")
                                    where (string)p.Element("departmentname").Value == "Dep 1"
                                    select p).First();



    var men= (from a in com.Elements("year")
                              where (string)a.Attribute("id") == "2013"
                              select (string)(a.Element("men"))).ToList<string>();
XElement com=(来自company.Elements(“部门”)中的p)
其中(字符串)p.Element(“部门名称”).Value==“部门1”
选择p.First();
var men=(来自com.Elements(“年”)中的a)
其中(字符串)a.Attribute(“id”)=“2013”
选择(字符串)(a.Element(“men”)).ToList();

好的,伙计们。我用过这个,它很管用 谢谢你的帮助

 XElement com = (from p in company.Elements("department")
                                    where (string)p.Element("departmentname").Value == "Dep 1"
                                    select p).First();



    var men= (from a in com.Elements("year")
                              where (string)a.Attribute("id") == "2013"
                              select (string)(a.Element("men"))).ToList<string>();
XElement com=(来自company.Elements(“部门”)中的p)
其中(字符串)p.Element(“部门名称”).Value==“部门1”
选择p.First();
var men=(来自com.Elements(“年”)中的a)
其中(字符串)a.Attribute(“id”)=“2013”
选择(字符串)(a.Element(“men”)).ToList();

其他部门呢!其他部门呢!我更愿意以我开始的方式使用xElement。我该怎么做?你开始的方式?你的意思是使用LINQ语法而不是扩展方法?我更喜欢用我开始时的方式使用xElement。我该怎么做?你开始的方式?你的意思是使用LINQ语法而不是扩展方法?我更喜欢用我开始时的方式使用xElement。我该怎么做?@user2939293在我的电脑上工作。。。您的xml格式不正确。.属性值必须在原始文件中的
范围内。
是的,值在“”范围内。我改了。谢谢,我更愿意用我开始的方式使用xElement。我该怎么做?@user2939293在我的电脑上工作。。。您的xml格式不正确。.属性值必须在原始文件中的
范围内。
是的,值在“”范围内。我改了。非常感谢。