<GetPromotionByIdResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" MajorVersion="2" xmlns="http://fake.com/services">
<Header>
<Response ResponseCode="OK">
<RequestID>1</RequestID>
</Response>
</Header>
<Promotion PromotionId="5200" EffectiveDate="2014-10-10T00:00:00" ExpirationDate="2014-11-16T23:59:00" PromotionStatus="Active" PromotionTypeName="DefaultPromotion">
<Description TypeCode="Long" Culture="en-AU">Promotion Description</Description>
</Promotion>
</GetPromotionByIdResponse>
Im пытается извлечь этотПолучить элемент из XDocument & Edit Attribute
<Promotion PromotionId="5200" EffectiveDate="2014-10-10T00:00:00" ExpirationDate="2014-11-16T23:59:00" PromotionStatus="Active" PromotionTypeName="DefaultPromotion">
<Description TypeCode="Long" Culture="en-AU">Promotion Description</Description>
</Promotion>
и конвертировать PromotionId = "5200" в PromotionId = "XXX"
я могу извлечь < Promotion> элемент с приведенным ниже кодом, но не может решить, как изменить атрибут
XNamespace xmlResponseNamespace = xmlPromotionResponse.Root.GetDefaultNamespace();
XmlNamespaceManager nsm = new XmlNamespaceManager(new NameTable());
nsm.AddNamespace("def", xmlResponseNamespace.ToString());
XElement xmlPromotionElement =
xmlPromotionResponse
.Descendants().SingleOrDefault(p => p.Name.LocalName == "Promotion");
Работает идеально. Спасибо. Мне нравится использовать XNamespace лучше, чем namespacemanager ... гораздо меньше кода. – tonev
'XmlNamespaceManager' используется, если вы используете XPath для запроса XML (в этом случае мы используем LINQ, а не XPath). Ваш исходный код должен работать даже если вы удалите 2 строки кодов с использованием 'XmlNamespaceManager' – har07