试图在XML响应中找到元素

本文关键字:元素 响应 XML | 更新日期: 2023-09-27 17:51:08

这是我从XML中检索元素的代码:

private async Task<XElement> PostAsXmlRequestAsync(XElement parameter, CancellationToken responseToken)
{
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri(Constants.url);
        HttpResponseMessage responseMessage = await client.PostAsXmlAsync(Constants.uri, parameter, responseToken);
        string responseContent = await responseMessage.Content.ReadAsStringAsync();
        XElement responseXml = XElement.Parse(responseContent);
        **bool hasElement = responseXml.Elements("Warnings").Any();
        Console.WriteLine(hasElement);**
        return responseXml;
    }
}

responseXml有一个Warnings元素,但hasElement总是false

这是来自响应的示例XML:

<OTA_VehAvailRateRS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opentravel.org/OTA/2003/05" Target="Qual" Version="2.007">
    <Success /> 
    <Warnings>
        <Warning Type="1" ShortText="FOR RENTERS UNDER 25 YRS OF AGE SEE KEYWORD AGE" RecordID="201" /> 
    </Warnings>
    <VehAvailRSCore>
        <VehRentalCore PickUpDateTime="2014-05-01T10:00:00-05:00" ReturnDateTime="2014-05-03T10:00:00-05:00">
            <PickUpLocation ExtendedLocationCode="LAXT15" LocationCode="LAX" /> 
            <ReturnLocation ExtendedLocationCode="LAXT15" LocationCode="LAX" /> 
        </VehRentalCore>
    </VehAvailRSCore>
</OTA_VehAvailRateRS>

试图在XML响应中找到元素

您正在寻找的可能节点有一些名称空间而不是默认的空名称空间(即XML有xmlns="http://some-namespace"之类的东西)。

你应该使用带有名称空间的版本来选择元素。XContainer。Elements文章将这两种情况作为示例展示:

XNamespace aw = "http://www.adventure-works.com";
var elements = xmlTree.Elements(aw + "Type2");