2010-11-27 5 views
9

Dies ist mehr eine kosmetische Änderung, die ich machen wollte, und ich fragte mich, wie konnte ich die generierte XML-Datei mit UTF-8 Großbuchstaben statt UTF-8 Kleinbuchstaben machen?utf-8 in Großbuchstaben?

 XmlWriterSettings settings = new XmlWriterSettings(); 
     settings.Encoding = Encoding.UTF8; 
     settings.Indent = true; 
     settings.IndentChars = "\t"; 

     XmlWriter writeXML = XmlWriter.Create("test_file.xml", settings); 
     writeXML.WriteStartDocument(false); 
     writeXML.WriteComment(fileLicense); 
     writeXML.WriteStartElement("templates"); 
     writeXML.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance"); 
     writeXML.WriteAttributeString("xsi", "noNamespaceSchemaLocation", null, "test_file.xsd"); 
     writeXML.WriteEndElement(); 
     writeXML.WriteEndDocument(); 
     writeXML.Close(); 

Antwort

18

Ich fand this blog post. Scheint es ist was du willst.

public class UpperCaseUTF8Encoding : UTF8Encoding 
{ 
    // Code from a blog http://www.distribucon.com/blog/CategoryView,category,XML.aspx 
    // 
    // Dan Miser - Thoughts from Dan Miser 
    // Tuesday, January 29, 2008 
    // He used the Reflector to understand the heirarchy of the encoding class 
    // 
    //  Back to Reflector, and I notice that the Encoding.WebName is the property used to 
    //  write out the encoding string. I now create a descendant class of UTF8Encoding. 
    //  The class is listed below. Now I just call XmlTextWriter, passing in 
    //  UpperCaseUTF8Encoding.UpperCaseUTF8 for the Encoding type, and everything works 
    //  perfectly. - Dan Miser 

    public override string WebName 
    { 
    get { return base.WebName.ToUpper(); } 
    } 

    public static UpperCaseUTF8Encoding UpperCaseUTF8 
    { 
    get 
    { 
     if (upperCaseUtf8Encoding == null) { 
     upperCaseUtf8Encoding = new UpperCaseUTF8Encoding(); 
     } 
     return upperCaseUtf8Encoding; 
    } 
    } 

    private static UpperCaseUTF8Encoding upperCaseUtf8Encoding = null; 
} 

Um diese benutzerdefinierte Codierung Sie eine XMLTextWriter als Ziel der XDocument Save-Methode verwenden müssen, verwenden.

// This section not shown in the blog 

var xDoc = XDocument.Load(xmlDocNm); //This is your xml path value 
// Changes to XML Document here 

// .Net writes the XML declaration using lower case utf-8. 
// <?xml version="1.0" encoding="utf-8"?> 
// It is not suppesed to matter but NiceForm expects the delcaration to be uppercase. 
// <?xml version="1.0" encoding="UTF-8"?> 
// We are using a XMLWriter with a custom Encoding to captialize the UTF 

// Set various options to retrive the desired output 
var settings = new XmlWriterSettings { 
    Encoding = new UpperCaseUTF8Encoding(), // Key setting option for this example 

    NewLineHandling = System.Xml.NewLineHandling.Replace, 
    NewLineOnAttributes = true, 
    Indent = true       // Generate new lines for each element 
}; 

using (var xmlWriter =XmlTextWriter.Create(xmlDocNm, settings)) { 
    xDoc.Save(xmlWriter); 
} 
+0

Das hat gut funktioniert, danke. – Prix

+1

Danke! Ich habe deinen Code in einer Xml-Klasse verwendet, die ich geschrieben habe. Es macht auch andere Sachen, wie zB in UTF-8 oder UTF-16 ausgeben zu lassen und das Xml hübsch zu machen oder zu linearisieren. http://www.rhyous.com/2015/04/07/an-xml-class-to-linearize-xml-make-pretty-xml-and-encoding-in-utf-8-or-utf-16 / – Rhyous