Неизвестный chr выводится после XSL Compiled Transform - PullRequest
2 голосов
/ 15 июля 2010

мой код выводит какой-то странный символ в самом начале моего выходного XML-файла XSLT, и ни Visual Studio 2008, ни блокнот не показывают его. Но он определенно есть, потому что VS позволяет мне удалить его и затем автоматически отформатирует XML. Как мне это остановить? Вот мой код:

    // create the readers for the xml and xsl
    XmlReader reader = XmlReader.Create(
        new StringReader(LoadFileAsString(MapPath(xslPath)))
    );
    XmlReader input = XmlReader.Create(
        new StringReader(LoadFileAsString(MapPath(xmlPath)))
    );

    // create the xsl transformer
    XslCompiledTransform t = new XslCompiledTransform(true);
    t.Load(reader);

    // create the writer which will output the transformed xml
    StringBuilder sb = new StringBuilder();
    //XmlWriterSettings tt = new XmlWriterSettings();
    //tt.Encoding = Encoding.Unicode;
    XmlWriter results = XmlWriter.Create(new StringWriter(sb));//, tt);

    // write the transformed xml out to a stringbuilder
    t.Transform(input, null, results);

    // return the transformed xml
    WriteStringAsFile(MapPath(outputXmlPath), sb.ToString());


    public static string LoadFileAsString(string fullpathtofile)
    {
        string a = null;
        using (var sr = new StreamReader(fullpathtofile))
            a = sr.ReadToEnd();
        return a;
    }

    public static void WriteStringAsFile(string fullpathtofile, string content)
    {
        File.WriteAllText(fullpathtofile, content.Trim(), Encoding.Unicode);
    }

1 Ответ

4 голосов
/ 15 июля 2010

Эта вещь в начале вашего выходного XML-документа, скорее всего, является меткой порядка байтов или BOM , которая указывает, являются ли байты в вашемUnicode выводится в порядке с прямым или прямым порядком байтов.

Эта спецификация может быть полезна для потребителей вашего XML-документа;однако в некоторых случаях это может привести к проблемам, и тогда его лучше не создавать.

Вы можете указать, создается ли спецификация, используя Encoding, указанную с помощью XmlWriterSettings:

XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
xmlWriterSettings.Encoding = new UTF8Encoding(false);

Приведенный выше код создаст ваш документ с использованием кодировки UTF8.Это, скорее всего, то, что вы хотите получить, если ваша потребляющая система явно не запрашивает кодировку UTF16 / Unicode или вы имеете дело с азиатским символом.

Чтобы создать документ в кодировке UTF16 / Unicode, используйте UnicodeEncoding со вторым параметром, установленным на false:

XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
xmlWriterSettings.Encoding = new UnicodeEncoding(false, false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...