根据以前的元素

时间:2017-08-17 13:38:00

标签: c# xml soap

美好的一天。 我希望有人能帮助我。我花了好几天试图弄清楚这一点没有太多运气。我有一个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,然后在参数下获取TempId和MappedId的值。

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


 foreach (XElement response in responses)
 {

 }

非常感谢任何援助。我已经尝试过很多我找到的例子,但没有一个能够得到我需要的确切细节。

2 个答案:

答案 0 :(得分:0)

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

一种方法如下:

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

    string value = tempIdElement.Value;
}

当你致电.Descendants()时,会给你所有的子元素。因此,在上面的代码中,我们得到了Parameters,在参数下,我们找到了TempId

在试验Linq时,您可以找到实现此结果的不同方法。

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

答案 1 :(得分:0)

第一次我会为这个实体声明一个类,然后查询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的更多信息