У меня есть XMLGet XElement из XDocument
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
загружаю XML в XDocument
XDocument xDoc = XDocument.Parse(xmlString);
и рядом я пытаюсь найти XElement
содержит Body
Я попытался
XElement bodyElement = xDoc.Descendants(XName.Get("Body", "s")).FirstOrDefault();
или
XElement bodyElement = xDoc.Descendants("Body").FirstOrDefault();
или
XElement bodyElement = xDoc.Elements("Body").FirstOrDefault();
но bodyElement
всегда null
.
Если я пытаюсь добавить Namespace
XElement bodyElement = xDoc.Descendants("s:Body").FirstOrDefault();
я получил ошибку о :
.
Если удалить s из XML
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<Body s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
Все работает. KG
Как добраться XElement
Кузов:?
спасибо много. Работает отлично. – BWA
@BWA. Если у вас возникли проблемы с получением XML с различными пространствами имен, вы также можете попробовать LocalName: 'xDoc.Descendants(). Где (x => x.Name.LocalName.Equals (" Тело ", StringComparison.Ordinal))' – Crowcoder
@Crowcoder: Если вы собираетесь делать сравнение по порядку, просто используйте '==' ... но сравнение значений LocalName редко бывало хорошим, IMO. –