2017-08-17 53 views
0

美好的一天。 我希望有人能够帮助我。我花了好几天的时间试图弄清楚这一点,但没有多少运气。我有一个XML SOAP文档,我试图从中获取某些值。下面是该文件的剪辑。根据以前的元素读取XML元素

<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> 

我需要首先搜索的设备ID以检查特定的ID,如果我找到一个匹配的话,我需要去pararameters并获得TempID的价值观和MappedID元素。

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

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


foreach (XElement response in responses) 
{ 

} 

任何援助将不胜感激。我已经尝试了很多我发现的例子,但没有一个能够得到我需要的确切细节。

回答

0

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

一个方法如下:

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

    string value = tempIdElement.Value; 
} 
当你调用 .Descendants()

,它会给你这下所有的子元素。所以,在上面的代码中,我们得到了Parameters,在参数下,我们找到了TempId

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

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

+0

非常感谢Pastør和Bruno。 你已经帮了我很大的忙。我真的很感谢你为此付出的时间。它没有按预期工作。 再次感谢您。 –

1

firstable我想声明一个类为这个实体,然后查询XML:

public class DevicesParam 
{ 
    public DevicesParam() { } 

    public long TempId { get; set; } 
    public long MappedId { get; set; } 
} 

然后写一个LINQ到这样的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的更多信息