Обработка пространств имен с помощью XmlReader

У меня есть сложный файл XML со следующей структурой:

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="xxx:xxx:xxx:xxx:xxxxx:xxx:xsd:xxxx.xxx.xxx.xx">
    <Element1>
        <Element2>
            <Element2A>xxxxxx</Element2A>
            <Element2B>2012-08-29T00:00:00</Element2B>
        </Element2>
    </Element1>
</Document>

Теперь я использую XmlReader для чтения этого XML-документа и обработки информации следующим образом.

XmlReader xr = XmlReader.Create(filename);
while (xr.Read()) 
{
   xr.MoveToElement();
   XElement node = (XElement)XElement.ReadFrom(xr);
   Console.WriteLine(node.Name);
}
xr.Close();

Проблема, с которой я столкнулся, заключается в том, что на выходе пространство имен имеет префикс к ElementName. например вывод

{xxx:xxx:xxx:xxx:xxxxx:xxx:xsd:xxxx.xxx.xxx.xx}Element1

Есть ли способ удалить/обработать это, так как мне нужно выполнить дальнейшую фильтрацию, используя имена элементов и имена дочерних элементов.


person dopplesoldner    schedule 09.10.2012    source источник


Ответы (2)


XElement.Name не является (как вы могли бы ожидать) String, а XName, который имеет LocalName, таким образом:

Console.WriteLine(node.Name.LocalName);
person Richard    schedule 09.10.2012
comment
Спасибо за ваш ответ Ричард. Однако это подводит меня к моей следующей проблеме. Я использую метод «Элемент» для фильтрации дочерних элементов. Поскольку XName не является простым именем, которое я ожидал, я не получаю никаких результатов. Есть идеи? - person dopplesoldner; 09.10.2012
comment
Собственно нашел! XNamespace ns = XElement.Load(filename).GetDefaultNamespace(); Тогда я могу использовать node.Element(ns + "ElementName").Value - person dopplesoldner; 09.10.2012

Вы можете удалить пространство имен. Один из способов удалить пространство имен — написать код С#, а другой — использовать преобразование XSLT, как это предлагается в Удалить пространство имен -Milind

person Milind Thakkar    schedule 09.10.2012