如何从XML获取值?

时间:2014-11-18 13:36:21

标签: c# asp.net xml linq-to-xml

我有一个非常长的XML字符串来自Web服务。我需要从即将发布的xml中读取数据。我搜索得太多,但很多例子只是为了一些深度结构。我的XML更深一点

<?xml version="1.0" encoding="utf-8" ?>
<root>
  <node1>
    <node11>50002</node11>
    <node12>Schools</node12>
    <node13>
      <node131>8</node131>
      <node132>School 1</node132>
      <node133>
        <node1331>22</node1331>
        <node1332>Department 1</node1332>
        <node1333>
          <node13331>1</node13331>
          <node13332>Branch 1</node13332>
          <node13333>
            <node133331>407</node133331>
            <node133332>Full-time</node133332>
            <node133333>903002</node133333>
            <node133334>915001</node133334>
          </node13333>
        </node1333>
        <node1333>
          <node13331>2</node13331>
          <node13332>Branch 2</node13332>
          <node13333>
            <node133331>407</node133331>
            <node133332>Full-time</node133332>
            <node133333>903002</node133333>
            <node133334>915001</node133334>
          </node13333>
        </node1333>
      </node133>
      <node133>
        <node1331>26</node1331>
        <node1332>Department 2</node1332>
        <node1333>
          <node13332></node13332>
          <node13333>
            <node133331>416</node133331>
            <node133332>Full-time</node133332>
            <node133333>903001</node133333>
            <node133334>915001</node133334>
          </node13333>
        </node1333>
      </node133>
    </node13>
    <node13>
      <node131>13</node131>
      <node132>School 2</node132>
      <node133>
        <node1331>3</node1331>
        <node1332>Department 1</node1332>
        <node1333>
          <node13332></node13332>
          <node13333>
            <node133331>517</node133331>
            <node133332>Full-time</node133332>
            <node133333>903001</node133333>
            <node133334>915001</node133334>
          </node13333>
        </node1333>
      </node133>
      <node133>
        <node1331>34</node1331>
        <node1332>Department 2</node1332>
        <node1333>
          <node13332></node13332>
          <node13333>
            <node133331>830</node133331>
            <node133332></node133332>
            <node133333>903002</node133333>
            <node133334>915001</node133334>
          </node13333>
        </node1333>
      </node133>
      <node133>
        <node1331>35</node1331>
        <node1332>Department 3</node1332>
        <node1333>
          <node13332></node13332>
          <node13333>
            <node133331>831</node133331>
            <node133332></node133332>
            <node133333>903002</node133333>
            <node133334>915001</node133334>
          </node13333>
        </node1333>
      </node133>
      <node133>
        <node1331>36</node1331>
        <node1332>Department 4</node1332>
        <node1333>
          <node13332></node13332>
          <node13333>
            <node133331>832</node133331>
            <node133332></node133332>
            <node133333>903002</node133333>
            <node133334>915001</node133334>
          </node13333>
        </node1333>
      </node133>
    </node13>
  </node1>
</root>

好吧,我可以像第一个节点那样使用XDocument获取数据。但我无法将它们读入数组。

var OrganizationCode= XDocument.Parse(serviceXML) //gets 50002
            .Descendants("root")
            .Descendants("node1")
            .Descendants("node11")
            .Select(x => x.Value)
            .FirstOrDefault();

答案是嵌套的foreach循环,但我无法实现它。

1 个答案:

答案 0 :(得分:2)

这应该为您提供所有node11值。假设您需要所有node11

var OrganizationCodes = XDocument.Parse(serviceXML)
        .Descendants("node11")
        .Select(x => x.Value);