source

파일 대신 문자열에 쓰기 XmlWriter

manysource 2023. 10. 22. 20:11

파일 대신 문자열에 쓰기 XmlWriter

XML 문자열을 반환해야 하는 WCF 서비스가 있습니다. 그런데 작성자가 문자열이 아닌 파일만 만들고 싶어하는 것 같습니다.노력했습니다.

string nextXMLstring = "";
using (XmlWriter writer = XmlWriter.Create(nextXMLstring))

nextXML 문자열에 파일 경로가 없다는 오류가 발생합니다.원하는 것은 다음과 같습니다.

using (XmlWriter writer = XmlWriter.Create("nextXMLstring.xml"))

XML을 빌드한 다음 문자열로 반환하려면 어떻게 해야 합니까?

감사합니다!!

StringWriter를 생성하여 XmlWriter에게 전달해야 합니다.

XmlWriter의 문자열 오버로드입니다.Create는 파일 이름에 대한 것입니다.

예.

using (var sw = new StringWriter()) {
  using (var xw = XmlWriter.Create(sw)) {
    // Build Xml with xw.


  }
  return sw.ToString();
}

리처드가 말했듯이,StringWriter그것이 앞으로 가는 길입니다.하지만 한가지 문제가 있습니다. 기본적으로,StringWriterUTF-16에 있다고 광고할 겁니다일반적으로 XML은 UTF-8에 있습니다. StringWriter를 서브클래싱하여 이 문제를 해결할 수 있습니다.

public class Utf8StringWriter : StringWriter
{
    public override Encoding Encoding
    {
         get { return Encoding.UTF8; }
    }
}

이것은 작성된 선언에 영향을 줄 것입니다.XmlWriter. 물론, 만약 당신이 문자열을 이진 형태로 다른 곳에 쓴다면, 당신이 수정하는 어떤 인코딩과 일치하는 인코딩을 사용해야 합니다.StringWriter. (위의 코드는 항상 UTF-8을 가정하고 있으며, 컨스트럭터에서 인코딩을 수용하는 더 일반적인 버전을 만드는 것은 사소한 일입니다.

그러면 다음을 사용합니다.

using (TextWriter writer = new Utf8StringWriter())
{
    using (XmlWriter xmlWriter = XmlWriter.Create(writer))
    {
        ...
    }
    return writer.ToString();
}

저는 이것이 오래된 것이라는 것을 알고 대답했지만, 여기 또 다른 방법이 있습니다.특히 문자열 시작 부분에 UTF8 BOM을 사용하지 않고 텍스트를 들여쓰기를 원하는 경우:

using (var ms = new MemoryStream())
using (var x = new XmlTextWriter(ms, new UTF8Encoding(false)) 
                   { Formatting = Formatting.Indented })
{
     // ...
     return Encoding.UTF8.GetString(ms.ToArray());
}

사용하다StringBuilder:

var sb = new StringBuilder();
    using (XmlWriter xmlWriter = XmlWriter.Create(sb))
    {
        ...
    }
return sb.ToString();

남자들은 xmlWriter에게 전화하는 것을 잊지 않습니다.close() 및 xmlWriter를 누릅니다.폐기()하지 않으면 문자열 생성이 완료되지 않습니다.빈 문자열일 뿐입니다.

여기서 가장 간단하고 빠른 해결책은 다음과 같습니다.

StringBuilder sb = new StringBuilder();

using (var writer = XmlWriter.Create(sb, settings))
{
    ... // Whatever code you have/need :)

    sb = sb.Replace("encoding=\"utf-16\"", "encoding=\"utf-8\""); //Or whatever uft you want/use.
    //Before you finally save it:
    File.WriteAllText("path\\dataName.xml", sb.ToString());
}

언급URL : https://stackoverflow.com/questions/955611/xmlwriter-to-write-to-a-string-instead-of-to-a-file