среда, 6 октября 2010 г.

XDocument. Работа с элементами без явного указания пространства имен по умолчанию (Default Namespace)

Если вы используете XDocument, Xml которого содержит явное пространство имен по умолчанию, то во время разбора элементов придется его явно указывать. Для ясности кусочки кода:
<Data xmlns="http://selo-blog.blogspot.com/">
 <Name>Иван</Name>
 <Gender>мужской</Gender>
</Data>

Чтобы получить значение тега "Name", придется выполнить следующий код:
XDocument xDoc = XDocument.Parse(inputString);
XNamespace xSpace = "http://selo-blog.blogspot.com/";
String name = xDoc.Root.Element(xSpace + "Name").Value;

Немного раздражительно, не правда ли?

Для облегчения страданий я создал следующие методы-расширения
public static class Extensions {
  public static XElement xElement(this XElement xParent, String name) {
    return xParent.Element(xParent.Name.Namespace + name);
  }

  public static IEnumerable<XElement> xElements(this XElement xParent, String name) {
    return xParent.Elements(xParent.Name.Namespace + name);
  }
}

Теперь работа с документом происходит обычным способом:
String name = xDoc.Root.xElement("Name").Value;

* This source code was highlighted with Source Code Highlighter.

Комментариев нет: