将后代LINQ提取为XML

时间:2012-01-30 09:54:52

标签: c# linq-to-xml

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

var hsname = xmldoc.Root.Element(ns + "ServiceName").Value;

获得后代被证明是一场噩梦。下面的缩写XML文件 - 请帮助: - )

-<HostedService xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/windowsazure">
    <Url>https://management.core.windows.net/subscriptionID/services/hostedservices/hostedservicename</Url>
    <ServiceName><hostedservicename></ServiceName>
        -<HostedServiceProperties>
            <Description/>
            <Location>South Central US</Location>
            <Label>EEEEEEEEEEEEEEEEEE</Label>
        </HostedServiceProperties>
        -<Deployments>
            -<Deployment>
            <Name>DeploymentName</Name>
            <DeploymentSlot>Production</DeploymentSlot>
            <PrivateID>55555555555555555555</PrivateID>
            <Status>Running</Status>

1 个答案:

答案 0 :(得分:3)

你没有表现出你曾经尝试过的东西......但是我希望这很好:

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();