XML获取特定元素

时间:2017-01-26 16:05:44

标签: c# .net xml xpath

我有一个XML文档,如下所示:

<root type="object">
  <totalResults type="number">x</totalResults>
  <itemsPerPage type="number">x</itemsPerPage>
  <startIndex type="number">x</startIndex>
  <schemas type="array">
    <item type="string">x</item>
  </schemas>
  <Resources type="array">
    <item type="object">
      <schemas type="array">
        <item type="string">x</item>
      </schemas>
      <id type="string">x</id>
      <externalId type="null"></externalId>
      <meta type="object">
        <created type="string">x</created>
        <location type="string">x</location>
      </meta>
      <userName type="string">x</userName>
      <emails type="array">
        <item type="object">
          <value type="string">x.x@x.com</value>
          <primary type="boolean">x</primary>
        </item>
      </emails>
    </item>
  </Resources>
</root>

我正在尝试获取这样的电子邮件地址:

 var emails = xmlContent.Root.Elements("Resources").Elements("item").Elements("Emails");
            foreach (XElement elem in emails)
            {
                Console.Write(elem.Value);
            }

这不起作用。有关如何从C#中获取此类XML XDocument的电子邮件地址的任何想法?我已经浏览了几个论坛和教程,但我似乎无法掌握XPath等。

2 个答案:

答案 0 :(得分:2)

 XDocument xdoc = XDocument.Load(new StringReader("<root ...")); //// load xml file
 var emails = xdoc.Descendants("Resources").Descendants("emails").ToList(); //// select all emails

我使用Descendants,因为它会在任何级别找到子级并搜索整个子树,但Elements只能找到直接子级

答案 1 :(得分:1)

var emails = xmlContent.Root.Elements("Resources").Elements("item").Elements("emails");
        foreach (XElement elem in emails)
        {
            Console.Write(elem.Value);
        }

有效。你有拼写错误。 XML区分大小写