Я бы предложил вам использовать LINQ для XML.
Здесь - хороший пример из MSDN.
Специально для вашего конкретного примера, предполагая, у нас есть следующая упрощенная версия XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<partners>
<partner qual="sender" value="BIRDXB"/>
<partner qual="receiver" value="GLOBLI"/>
</partners>
<shipment messageType="AIHub2Branch" status="new" type="house">
<partners>
<partner qual="sender" value="BIRDXB" role="importer"/>
<partner qual="receiver" value="GLOBLI"/>
<partner qual="finalDestination" value="GLOBLI"/>
<partner qual="exportGateway" value="BIRCGN"/>
<partner qual="shipmentCreator" value="BIRCGN"/>
</partners>
<refs>
<ref qual="shipper" type="shipper" value="20208098479"/>
<ref qual="shipper" type="shipper" value="8400649"/>
<ref qual="shipment" value="1202000626" system="true"/>
<ref qual="procarsId" value="BIRDXB1202000626" system="true"/>
<ref qual="ptt" value="BIRCGN20001198693" system="true"/>
<ref qual="awb" value="CGN-95629985" system="true"/>
<ref qual="mawb" value="501-06663753" system="true"/>
</refs>
</shipment>
</root>
Мы можем написать следующий C# код, чтобы получить конкретный c элемент:
var xDoc = XElement.Load("address.xml");
var address = (
from el in xDoc.Descendants("ref")
where (string)el.Attribute("qual") == "mawb"
select el
).FirstOrDefault();
Console.WriteLine(address?.Attribute("value")?.Value);
Хотя стоит упомянуть, что успокаивающую часть можно выполнить и с помощью методов расширения:
xDoc.Descendants("ref")
.FirstOrDefault(el => (string)el.Attribute("qual") == "mawb");