美好的一天。 我希望有人能帮助我。我花了好几天试图弄清楚这一点没有太多运气。我有一个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)
{
}
非常感谢任何援助。我已经尝试过很多我找到的例子,但没有一个能够得到我需要的确切细节。
答案 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的更多信息