C# 将子体LINQ提取到XML

C# 将子体LINQ提取到XML,c#,linq-to-xml,C#,Linq To Xml,徒劳地从使用XDocument(LINQ-to-XML)通过Azure REST API生成的XML文件中提取Status子体的值。使用此方法提取根元素时没有问题: var hsname = xmldoc.Root.Element(ns + "ServiceName").Value; 得到后代被证明是一场噩梦。下面是缩写的XML文件-请帮助:-) - https://management.core.windows.net/subscriptionID/services/hostedservic

徒劳地从使用XDocument(LINQ-to-XML)通过Azure REST API生成的XML文件中提取Status子体的值。使用此方法提取根元素时没有问题:

var hsname = xmldoc.Root.Element(ns + "ServiceName").Value;
得到后代被证明是一场噩梦。下面是缩写的XML文件-请帮助:-)

-
https://management.core.windows.net/subscriptionID/services/hostedservices/hostedservicename
-
美国中南部
依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依
-
-
部署名称
生产
55555555555555555555
跑步

您还没有展示您的尝试。。。但我希望这一切都会好起来:

string status = (string) xmldoc.Descendants(ns + "Status").FirstOrDefault();
如果不存在
Status
元素,则会给您一个空值。根据您的需求,您可能需要使用
Single()
SingleOrDefault()

编辑:只需扩展注释,您就可以使您的代码在面对其他
Status
元素时更加健壮,如下所示:

string status = (string) xmldoc.Descendants(ns + "HostedService")
                               .Descendants(ns + "ServiceName")
                               .Descendants(ns + "Deployments")
                               .Descendants(ns + "Deployment")
                               .Descendants(ns + "Status")
                               .FirstOrDefault();

你还没有表现出你的努力。。。但我希望这一切都会好起来:

string status = (string) xmldoc.Descendants(ns + "Status").FirstOrDefault();
如果不存在
Status
元素,则会给您一个空值。根据您的需求,您可能需要使用
Single()
SingleOrDefault()

编辑:只需扩展注释,您就可以使您的代码在面对其他
Status
元素时更加健壮,如下所示:

string status = (string) xmldoc.Descendants(ns + "HostedService")
                               .Descendants(ns + "ServiceName")
                               .Descendants(ns + "Deployments")
                               .Descendants(ns + "Deployment")
                               .Descendants(ns + "Status")
                               .FirstOrDefault();

@ MyMaMiSeNo:考虑使用这个代码片段返回一个“状态”子代的第一次出现的值。仔细查看架构,确认在此之前不会出现其他“Status”元素。@hacktick:没关系,因为我指定的是hostedservicename,它是唯一的,我将使用相同的方法来过滤掉所有的产品deployments@mynameisneo请考虑使用这个代码片段返回一个“状态”子代的第一次出现的值。仔细查看架构,确保之前不会出现其他“Status”元素。@hacktick:这很好,因为我正在指定hostedservicename,它是唯一的,并且我将使用相同的方法筛选出仅使用LINQ to XML的生产部署?如果您有XML模式,则可以生成自动解析XML的代码。为什么使用LINQ转换XML?如果您有XML模式,则可以生成自动解析XML的代码。