【问题标题】:Trying to find element in XML response试图在 XML 响应中查找元素
【发布时间】:2014-03-21 01:17:00
【问题描述】:

这是我从 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>

【问题讨论】:

    标签: c# asp.net asynchronous xelement async-await


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,但它不起作用,元素值总是为空
    • @user3444535 所以你已经使用"http://www.opentravel.org/OTA/2003/05" 作为XNamespace 并且代码仍然不起作用?
    • @user3444535 - 请用“也试过...”编辑您的帖子 - 评论中的代码很难阅读。 IE。目前尚不清楚您是否做了XNamespace a = "http://www.opentravel.org/OTA/2003/05"; 或错误XNamespace a = "www.opentravel.org/OTA/2003/05";
    • 抱歉,XNamespace xmlns = "http://www.opentravel.org/OTA/2003/05"; var elements = responseXml.Elements(xmlns + "OTA_VehAvailRateRS"); Console.WriteLine(elements); 是正确的同名。这是行不通的。元素为空...
    • @user3444535 Elements 据我所知,从不返回 null...无论如何,如果您阅读 MSDN 链接,您会注意到“返回过滤后的 子元素集合 of this element” - 你要求与“this element”同名的子元素 - 实际上你得到 empty collection 作为结果。
    猜你喜欢
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2018-02-02
    相关资源
    最近更新 更多