Re: XmlTextwriter Output als String

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance



Werner Perplies wrote:

ich würde gerne einen String in Xml-Output mit gewünschter Codierung als
String umwandeln.

Generell könnte ich das natürlich über eine temporäre Datei realisieren:

XmlTextWriter xw = new XmlTextWriter(xmlFileName,
Encoding.GetEncoding(1252));
.
.
.
xw.Close();

und dann die Datei wieder einlesen.

es müsste doch einen einfacheren Weg geben, oder?

Wenn ich es so versuche:
internal string ConvertStringToXmlString(string tag, string
content)
{
StringWriter sw = new StringWriter();
XmlTextWriter xmlWriter = new XmlTextWriter(sw);
xmlWriter.WriteStartElement(tag);
xmlWriter.WriteString(content);
xmlWriter.WriteEndElement();
xmlWriter.Close();
return sw.ToString();
}
habe ich zwar einen String, kann aber das Encoding nicht festlegen.

Ein .NET String ist intern immer UTF-16 kodiert.

Wenn es dir nur um die XML-Deklaration geht, dann kannst du von StringWriter ableiten und die Encoding-Eigenschaft überschreiben:

public class StringWriterWithEncoding : StringWriter
{
private Encoding myEncoding;

public override Encoding Encoding
{
get
{
return myEncoding;
}
}
public StringWriterWithEncoding(Encoding enc) : base()
{
myEncoding = enc;
}
}

und dann etwa

internal string ConvertStringToXmlString(string tag, string
content, Encoding encoding)
{
StringWriter sw = new StringWriterWithEncoding(encoding);
using (XmlWriter xmlWriter = XmlWriter.Create(sw))
{
xmlWriter.WriteStartElement(tag);
xmlWriter.WriteString(content);
xmlWriter.WriteEndElement();
xmlWriter.Close();
}
return sw.ToString();
}

dann wird der XmlWriter in der XML-Deklaration das übergebene Encoding ausgeben.

--

Martin Honnen --- MVP XML
http://msmvps.com/blogs/martin_honnen/
.



Relevant Pages

  • Re: XmlTextwriter Output als String
    ... wenn ich die XML-Deklaration anschließend entferne. ... internal string ConvertStringToXmlString(string tag, string ... content, Encoding encoding) ... using (XmlWriter xmlWriter = XmlWriter.Create(sw, ...
    (microsoft.public.de.german.entwickler.dotnet.csharp)
  • Re: inputstream -> string
    ... den aus dem Reader gelesenen char-Buffer ... StringWriter sw = new StringWriter; ... Kein Encoding anzugeben, ... private String readStream ...
    (de.comp.lang.java)
  • Re: XmlTextwriter Output als String
    ... internal string ConvertStringToXmlString(string tag, string ... content, Encoding encoding) ... using (XmlWriter xmlWriter = XmlWriter.Create(sw, ... Der String ist intern immer UTF-16 kodiert, da änderst sich nichts, ob du deinen ursprünglichen Code mit StringWriter benutzt oder obigen Ansatz oder erst in eine Datei schreibst aber dann diese wieder ausliest. ...
    (microsoft.public.de.german.entwickler.dotnet.csharp)
  • Re: Why asci-only symbols?
    ... >> Perhaps string equivalence in keys will be treated like numeric equivalence? ... I know typewill be and in itself contain no encoding information now, ... >and a Unicode string, the system default encoding ...
    (comp.lang.python)
  • Re: Byte Array to String
    ... retrieved text will mismatch the original characters. ... encoding the characters. ... Dim strFileData as String ...
    (microsoft.public.dotnet.framework.aspnet)