XmlWriter ‹изображение: изображение›

Извините, если это очевидно, но я пытаюсь написать некоторый xml для карты сайта следующим образом:

<url>
    <loc>http://...</loc>
    <priority>0.5</priority>
    <image:image>
      <image:loc>http://...</image:loc>
     </image:image>
</url>

Со следующим кодом:

    const string locationPrefix = "loc";
    const string imagePrefix = "image";
    writer.WriteStartElement("image", imagePrefix);
    writer.WriteStartElement("image", locationPrefix);
    writer.WriteValue(imageUrl);
    writer.WriteEndElement(); // </image:loc>
    writer.WriteEndElement(); // </image:image>

Но вместо этого я получаю это.

<image xmlns="image">
   <image xmlns="loc">http://...</image>
 </image>

Может ли кто-нибудь сказать мне, где я здесь ошибаюсь?

Изменить: вот и все

writer.WriteStartElement("image", imagePrefix, null);

person DevDave    schedule 24.01.2013    source источник
comment
не могли бы вы прислать мне образец кода, я написал writer.WriteStartElement (image, imagePrefix, null); но это ошибка   -  person VnDevil    schedule 08.01.2017


Ответы (2)


Используйте перегрузку WriteStartElement с 3 параметрами http://msdn.microsoft.com/en-us/library/7cdfkth5.aspx

  1. префикс: префикс пространства имен элемента.
  2. localName: локальное имя элемента.
  3. ns: URI пространства имен, связываемый с элементом.
person Cédric Bignon    schedule 24.01.2013

Вы хотите добавить префикс к своим xml-элементам, который должен указывать на пространство имен. Попробуй это

using(var ms = new MemoryStream())
using (var writer = XmlWriter.Create(ms))
{
    const string imagePrefix = "img";
    writer.WriteStartElement(imagePrefix, "image", "http://image.com");
    writer.WriteStartElement(imagePrefix, "local", "http://image.com");
    writer.Flush();
    writer.Close();
    Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray()));
}
person Mehmet Ataş    schedule 24.01.2013