Извлечь потомка LINQ в XML - PullRequest
0 голосов
/ 30 января 2012

Напрасно пытается извлечь значение потомка Status из XML-файла, созданного с помощью API-интерфейса REST Azure с использованием XDocument (LINQ to XML).Нет проблем извлечения корневых элементов с помощью этого метода:

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 Ответ

3 голосов
/ 30 января 2012

Вы не показали, что пытались ... но я ожидаю, что это будет хорошо:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...