【问题标题】:Read XML Element based on previous element根据前一个元素读取 XML 元素
【发布时间】:2017-08-17 13:37:59
【问题描述】:

美好的一天。 我希望有人可以帮助我。我花了几天时间试图解决这个问题,但运气不佳。我有一个 XML SOAP 文档,我试图从中获取某些值。下面是文档的截图。

<Devices isOnline="false">
        <deviceId>
          <Number>1</Number>
          <Id>11111</Id>
        </deviceId>
        <lastUploadDateTime>2017-07-27</lastUploadDateTime>
        <Parameters>
          <TempId>22222</TempId>
          <MappedId>3333</MappedId>
        </Parameters>
 </Devices>

我需要首先在 deviceID 中搜索以检查特定 ID,如果找到匹配项,我需要转到参数并获取 TempID 和 MappedID 元素的值。

到目前为止,我有以下代码循环遍历 Devices 元素,但我不确定如何检查 deviceId 下的特定 ID,然后在 Parameters 下获取 TempId 和 MappedId 的值。

 XDocument doc = XDocument.Parse(xml);
 XNamespace ns = "http://";
 IEnumerable<XElement> responses = doc.Descendants("Devices");


 foreach (XElement response in responses)
 {

 }

任何帮助将不胜感激。我已经尝试了很多我找到的示例,但没有一个能够获得我需要的确切详细信息。

【问题讨论】:

    标签: c# xml soap


    【解决方案1】:

    有很多方法可以遍历你的 xml。

    一种方式如下:

    foreach (XElement response in responses)
    {
        var tempIdElement = 
        response.Descendants("Parameters").Elements("TempId").FirstOrDefault();
    
        string value = tempIdElement.Value;
    }
    

    当您调用.Descendants() 时,它会为您提供此下的所有子元素。所以,在上面的代码中,我们得到了Parameters,在参数下,我们找到了TempId

    当您尝试使用 Linq 时,您可以找到实现此结果的不同方法。

    您还应该添加必要的空条件检查来处理 Xml 中缺少元素的情况。

    【讨论】:

    • 非常感谢 Pastør 和 Bruno。你对我帮助很大。我非常感谢您花时间帮助我解决这个问题。它没有按预期工作。再次感谢您。
    【解决方案2】:

    首先我会为这个实体声明一个类,然后查询 XML:

    public class DevicesParam
    {
        public DevicesParam() { }
    
        public long TempId { get; set; }
        public long MappedId { get; set; }
    }
    

    然后像这样编写一个 LINQ to XML 查询:

    var parameters = (from p in responses.Descendants("Parameters") select new 
    DevicesParam {                                                                    
        TempId = p.TempId ?? 0 ,                                                                                  
        MappedId = p.MappedId ?? 0                                                                                    
    }).SingleOrDefault();
    

    这里有一个link,用于阅读有关 C# 中 LINQ to XML 的更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多