2012-08-03 6 views
3

Рассмотрим следующий C# код:C# WriteDocType генерирует неправильный Plist доктайп

XmlTextWriter writer = new XmlTextWriter(pathFichier, null); 
writer.WriteStartDocument(); 
writer.WriteDocType("plist", "-//Apple//DTD PLIST 1.0//EN", "http://www.apple.com/DTDs/PropertyList-1.0.dtd", null); 
writer.WriteStartElement("plist"); 
writer.WriteAttributeString("version", "1.0"); 
writer.WriteFullEndElement(); // plist 
writer.Close(); 

Plist доктайп обычно:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 

приведенный выше код добавляет пустое подмножество в конце строки типа документа :

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"[]> 

«[]» на конце винты с разборкой iOs.

Как я могу избавиться от него с помощью XmlTextWriter?

Должен ли я просто открыть файл и удалить «[]»?

+0

Там более простой обходной путь, как показано в этой теме: http://stackoverflow.com/questions/12358061/ с-острый LINQ к XML-удалить-символы-из-ОТДА-заголовка – balint

ответ

3

Вы можете получить класс для XmlTextWriter и override the WriteDocType method.

Было бы выглядеть примерно так:

public override void WriteDocType(string name, string pubid, string sysid, string subset) 
{ 
    this.wrappedWriter.WriteRaw("-//Apple//DTD PLIST 1.0//EN", "http://www.apple.com/DTDs/PropertyList-1.0.dtd"); 
} 

EDIT от человека, который задал этот вопрос. Вот код, который я написал, чтобы он работал.

WriteDocType переопределение:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace your.namespace { 
    public class PListWriter : System.Xml.XmlTextWriter { 

     public PListWriter(string filename, System.Text.Encoding encoding) : base(filename, encoding) { } 

     public override void WriteDocType(string name = "", string pubid = "", string sysid = "", string subset = "") { 
      this.WriteRaw("<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">"); 
     } 
    } 
} 

Его использование в дикой природе:

PListWriter writer = new PListWriter(pathFichier, null);  
writer.Formatting = Formatting.Indented; 
writer.WriteStartDocument(); 
writer.WriteDocType(); 
writer.WriteStartElement("plist"); 
writer.WriteAttributeString("version", "1.0"); 
writer.WriteFullEndElement(); // plist 
writer.Close(); 
Смежные вопросы