Я пытаюсь получить значение одного из элементов-потомков, используя значение другого элемента.Получить элемент корневого потомка, используя значение другого элемента
Вот как XML выглядит:
<RateQuoteResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<RateQuote>
<SERVICEUPGRADES>
<DELIVERYTIME>Single-hour Window</DELIVERYTIME>
<SERVICE_TYPE>guaranteed window</SERVICE_TYPE>
<TOTAL_COST>245.52</TOTAL_COST>
</SERVICEUPGRADES>
<SERVICEUPGRADES>
<DELIVERYTIME>Multi-hour Window</DELIVERYTIME>
<SERVICE_TYPE>guaranteed window</SERVICE_TYPE>
<TOTAL_COST>245.52</TOTAL_COST>
</SERVICEUPGRADES>
<SERVICEUPGRADES>
<DELIVERYDAYS>Please Call Customer Service for Available Days and Times</DELIVERYDAYS>
<DELIVERYTIME>Single or Multi Day Window</DELIVERYTIME>
<SERVICE_TYPE>guaranteed window</SERVICE_TYPE>
<TOTAL_COST>130.52</TOTAL_COST>
</SERVICEUPGRADES>
<SERVICEUPGRADES>
<DELIVERYDATE>04/26/2016</DELIVERYDATE>
<DELIVERYDAYS>1</DELIVERYDAYS>
<DELIVERYTIME>before 9:00 AM</DELIVERYTIME>
<SERVICE_TYPE>guaranteed delivery</SERVICE_TYPE>
<TOTAL_COST>195.52</TOTAL_COST>
</SERVICEUPGRADES>
<SERVICEUPGRADES>
<DELIVERYDATE>04/26/2016</DELIVERYDATE>
<DELIVERYDAYS>1</DELIVERYDAYS>
<DELIVERYTIME>before 12:00 PM (noon)</DELIVERYTIME>
<SERVICE_TYPE>guaranteed delivery</SERVICE_TYPE>
<TOTAL_COST>160.52</TOTAL_COST>
</SERVICEUPGRADES>
<SERVICEUPGRADES>
<DELIVERYDATE>04/26/2016</DELIVERYDATE>
<DELIVERYDAYS>1</DELIVERYDAYS>
<DELIVERYTIME>before 3:30 PM</DELIVERYTIME>
<SERVICE_TYPE>guaranteed delivery</SERVICE_TYPE>
<TOTAL_COST>130.52</TOTAL_COST>
</SERVICEUPGRADES>
<SERVICEUPGRADES>
<DELIVERYDATE>04/26/2016</DELIVERYDATE>
<DELIVERYDAYS>1</DELIVERYDAYS>
<SERVICE_TYPE>regional delivery</SERVICE_TYPE>
<TOTAL_COST>95.52</TOTAL_COST>
</SERVICEUPGRADES>
</RateQuote>
</RateQuoteResponse>
То, что я пытаюсь сделать, это получить значение TOTAL_COST
узла, в котором элемент является regional delivery
Ниже код работает для всех остальных элементов:
Все эти работы, но нижняя строка возвращают null каждый раз, даже когда узел существует и содержит элементы со значениями.
var deliveryTime7 = doc.Root.Descendants("SERVICEUPGRADES").SingleOrDefault(c => (string)c.Element("SERVICE_TYPE") == "regional delivery");
Я делаю что-то неправильно, пытаясь найти этот конкретный элемент? Я попытался добавить пространство имен (что-то вроде ниже), но это тоже не сработало.
var deliveryTime7 = doc.Root.Descendants(ns + "SERVICEUPGRADES").SingleOrDefault(e => (string)e.Element(ns + "SERVICE_TYPE") == "regional delivery");
Я пробовал свой код, и он работает для меня. – Arijoon
@ user2574121 Проверено, что ваш код в нем работает: https://dotnetfiddle.net/Wv0vM6. Если вы можете воспроизвести проблему в dotnetfiddle, есть шанс, что мы сможем помочь ... – har07