Как мне сказать xmlwriter игнорировать пустые узлы в C #? - PullRequest
0 голосов
/ 29 марта 2012

Я сериализую следующую сущность в XML для отправки в наше Google Search Appliance:

[Serializable]
[XmlType("record")]
public class GSADocumentRecord
{
    public enum RecordActions
    {
        Add,
        Delete
    }

    [XmlAttribute(AttributeName = "url")]
    public string URL { get; set; }

    [XmlAttribute(AttributeName = "mimetype")]
    public string MimeType { get; set; }

    [XmlAttribute(AttributeName = "last-modified")]
    public string LastModified { get; set; }

    [XmlAttribute(AttributeName = "action")]
    public string Action { get; set; }

    [XmlArray(ElementName = "metadata", Order = 0)]
    public List<GSADocumentRecordMeta> MetaData { get; set; }

    [XmlElement(ElementName = "content", Order = 1, Type = typeof(CDATA))]
    public CDATA Content { get; set; }
}

Проблема заключается в том, что когда он сериализуется без каких-либо записей MetaData, он добавляет <metadata /> в xml. Это проблема, потому что GSA (по любой причине) выдает ошибку, если при некоторых действиях существует пустой узел метаданных.

Я сериализую этот класс со следующим кодом:

        var ms = new System.IO.MemoryStream();
        XmlSerializer xml = new XmlSerializer(this.GetType());

        StreamWriter sw = new StreamWriter(ms);
        XmlWriter xw = new XmlTextWriter(sw);

        xw.WriteStartDocument();
        xw.WriteDocType("gsafeed", "-//Google//DTD GSA Feeds//EN", null, null);

        XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
        ns.Add("", "");

        xml.Serialize(xw, this, ns);

        ms.Position = 0;

Как я могу сказать XmlWriter игнорировать этот элемент, если список пуст?

1 Ответ

2 голосов
/ 29 марта 2012

Наличие самозакрывающегося тега, безусловно, кажется законным, похоже, что синтаксический анализатор на их стороне вызывает проблему. Вы можете сначала записать XML в строку, а затем сделать .Replace("<metadata />", "").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...