Чтобы добавить дополнительную информацию при запуске документа, я пишу свой корневой элемент с пространством имен. ТЕПЕРЬ, если я не пишу пространство имен, то последующие дочерние корневые узлы не выводят атрибут xmlns. Как я могу дать корневому элементу атрибут xmlns, но не дочерние узлы при сериализации?

му я все еще задаю вопросы на эту тему :-(

Поэтому я создаю объект, украшаю его с помощью атрибутов сериализации Xml. Из того, что я видел, я добавляю пустое пространство имен в коллекции пространств имен сериализации xml, чтобы не получить лишних атрибутов, которые я не собирался иметь.

Редактировать: Я имею в виду следующие атрибуты:

<url xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:xsd="http://www.w3.org/2001/XMLSchema"; xmlns="">

так что это дает мне два дополнительных атрибута.

После дальнейшего расследования, если я изменю начало документа с: **

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

в

writer.WriteStartElement("urlset");

** Тогда я не получаю пустой атрибут xmlns = "" в тегах URL. Это здорово, НО мне требуется, чтобы корневой элемент имелxmlns="http://www.sitemaps.org/schemas/sitemap/0.9"т.е.

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

Но я все еще получаю пустойxmlns="" атрибут в сериализованном типе.

[XmlRoot(ElementName = "url", Namespace="")]
public class SitemapNode
{
    [XmlElement(ElementName = "loc")]
    public string Location { get; set; }
    [XmlElement(ElementName = "lastmod")]
    public DateTime LastModified { get; set; }
    [XmlElement(ElementName = "changefreq")]
    public SitemapChangeFrequency ChangeFrequency { get; set; }
    [XmlElement(ElementName = "priority")]
    public decimal Priority { get; set; }

    public SitemapNode()
    {
        Location = String.Empty;
        LastModified = DateTime.Now;
        ChangeFrequency = SitemapChangeFrequency.monthly;
        Priority = 0.5M;
    }

    public SitemapNode(string location, DateTime lastModified, SitemapChangeFrequency changeFrequency, decimal priority)
    {
        L,ocation = location;
        LastModified = lastModified;
        ChangeFrequency = changeFrequency;
        Priority = priority;
    }
}

Затем я добавляю к своему XmlWriter следующее:

foreach (uk.co.andrewrea.SitemapNode node in List)
{
    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
    ns.Add(String.Empty, String.Empty);
    Serializer.Serialize(Writer, node, ns);
}

Это работает хорошо, за исключением того, что у меня остался emtpy xmlns = "" вот так

<url xmlns="">

У кого-нибудь есть идеи? Опять же, я могу добиться этого с помощью XmlTextWriter и XmlDocument, но мне нужно добиться этого с помощью XmlWriter.

Любая помощь очень ценится.

 jro05 мар. 2009 г., 20:55
> Я добавляю пустое пространство имен в коллекции пространств имен сериализации xml, чтобы не получить лишних атрибутов, которые я не собирался иметь. Вы можете остановиться на этом? Что вы подразумеваете под лишними атрибутами?
 REA_ANDREW05 мар. 2009 г., 21:33
<url xmlns: xsi = "w3.org/2001/XMLSchema-instance"; xmlns: xsd ="w3.org/2001/XMLSchema"; xmlns =" ​​"> Так что это дает мне два дополнительных атрибута.

Ответы на вопрос(0)

Ваш ответ на вопрос