Преобразование строки Xml с префиксами узлов в XElement

Это моя строка xml

 string fromHeader= "<a:From><a:Address>http://ex1.example.org/</a:Address></a:From>";

Я хочу загрузить его в XElement, но выполнение XElement.Parse(fromHeader) дает мне ошибку из-за префиксов "a". Я пробовал следующее:

XNamespace xNSa = "http://www.w3.org/2005/08/addressing";
string dummyRoot = "<root xmlns:a=\"{0}\">{1}</root>";
var fromXmlStr = string.Format(dummyRoot, xNSa, fromHeader);
XElement xFrom = XElement.Parse(fromXmlStr).Elements().First();

который работает, но серьезно, мне нужно 4 строки кода, чтобы сделать это! Каков самый быстрый/кратчайший способ получить мой XElement?


person joedotnot    schedule 06.04.2017    source источник


Ответы (1)


Я узнал, что приведенные выше 4 строки эквивалентны

XNamespace xNSa = "http://www.w3.org/2005/08/addressing";
XElement xFrom =  new XElement(xNSa + "From", new XElement(xNSa + "Address", "http://ex1.example.org/"));

ИЛИ АЛЬТЕРНАТИВНО переместите NS в элемент «От» перед синтаксическим анализом.

var fromStr = "<a:From xmlns:a=\"http://www.w3.org/2005/08/addressing\"><a:Address>http://ex1.example.org/</a:Address></a:From>";
XElement xFrom = XElement.Parse(fromStr);
person joedotnot    schedule 06.04.2017