从嵌套的XML元素中获取价值

时间:2017-02-25 03:45:17

标签: c# xml linq-to-xml

我想在职位类别会计下搜索会计师<code>的文本值。

以下是我想要获得此值的想法,但它不起作用。访问<code>的价值的正确方法是什么?

XDocument xml = XDocument.Parse(xmlString);
var accountants = from c in xml.Root.Elements("JobCategory") 
                  where c.Elements("Name").Equals("Accounting") 
                  select c;
var code = from c in accountants.Descendants("Code")
           select c;

我正在使用asp.net MVC。 xmlString是这样的:

<JobCategories xmlns="http://api.trademe.co.nz/v1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">

  <JobCategory>
  <Name>Accounting</Name>
  <Code>5001</Code>
  <SubCategories>
     <JobCategory>
       <Name>Accountants</Name>
       <Code>5002</Code>
     </JobCategory>
     <JobCategory>
       <Name>Accounts administrators</Name>
       <Code>5007</Code>
     </JobCategory>
  </SubCategories>
  </JobCategory>

  <JobCategory>
  <Name>Agriculture, fishing &amp; forestry</Name>
  <Code>5015</Code>
  <SubCategories>
     <JobCategory>
       <Name>Farming</Name>
       <Code>5016</Code>
     </JobCategory>
     <JobCategory>
       <Name>Fishing</Name>
       <Code>5017</Code>
     </JobCategory>
  </SubCategories>
  </JobCategory>

</JobCategories>

1 个答案:

答案 0 :(得分:0)

您有很多问题

首先,您的xml内容位于命名空间中,但您不能在代码中使用任何内容。如果要按名称访问元素,则必须正确引用这些名称。

表达式c.Elements("Name").Equals("Accounting")是无意义的。您正在尝试获取名为Name的子元素,并比较该集合是否等于字符串"Accounting"。这显然毫无意义。

假设您刚刚获得元素的Code值,您可以这样做:

XNamespace ns = "http://api.trademe.co.nz/v1";
var codes =
    from jc in doc.Root.Elements(ns + "JobCategory")
    select (string)jc.Element(ns + "Code");