【问题标题】:C# WriteDocType generates an incorrect PList doctypeC# WriteDocType 生成不正确的 PList 文档类型
【发布时间】:2012-08-01 16:06:36
【问题描述】:

考虑以下 C# 代码:

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字符串的末尾添加了一个空子集:

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

末尾的“[]”与 iOs 的解析有关。

如何使用 XmlTextWriter 摆脱它?

我应该重新打开文件并删除“[]”吗?

【问题讨论】:

标签: c# plist doctype xmltextwriter


【解决方案1】:

您可以为 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");
}

由提出问题的人编辑。这是我编写的让它工作的代码。

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();

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 2021-02-28
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    相关资源
    最近更新 更多