Как добавить пространство имен при выполнении XmlSerialization с XmlWriter? - PullRequest
3 голосов
/ 05 марта 2009

Я использую XmlWriter в сочетании с сериализацией Xml. Я могу нормально выводить XML, но мне кажется, что избежать включения атрибута xmlns в XmlWriter мне не удается.

Для написания начала документа я использую следующее:

    Writer.WriteStartDocument();
    Writer.WriteStartElement("urlset","http://www.sitemaps.org/schemas/sitemap/0.9");

Создав мой XmlWriter, я затем перебираю созданные мной SitemapNodes и записываю их в базовый построитель строк с помощью сериализации следующим образом:

    foreach (uk.co.andrewrea.SitemapNode node in List)
    {
        Serializer.Serialize(Writer, node);
    }

Как я уже сказал, это работает нормально, НО указанное пространство имен для корневого элемента не включено. Каждый раз, когда я пытаюсь физически написать атрибут xmlns, я получаю исключение, что система xmlns зарезервирована системой для использования XML, поэтому в основном я не могу ее использовать.

Я знаю, как это сделать с помощью XmlTextWriter, а также с помощью класса XmlDocument, но мне нужно понять, как этого добиться с помощью XmlWriter и с помощью сериализации.

Следующая попытка также вызывает исключение о том, что это пространство имен резервируется.

foreach (uk.co.andrewrea.SitemapNode node in List)
{
      XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
      ns.Add("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");

      Serializer.Serialize(Writer, node, ns);
}

Exception Details: System.ArgumentException: Prefix "xmlns" is reserved for use by XML.

1 Ответ

4 голосов
/ 05 марта 2009

Вы можете добавить пространство имен к атрибутам XmlSerialization, например ::10000

[XmlElement(
ElementName = "Members",
Namespace = "http://www.cpandl.com")]
public Employee[] Employees;

если у вас есть контроль над кодом.

...