파일 대신 문자열에 쓰기 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
그것이 앞으로 가는 길입니다.하지만 한가지 문제가 있습니다. 기본적으로,StringWriter
UTF-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
'source' 카테고리의 다른 글
Symfony 2 / Dectrine에서 ENUM을 활성화하는 방법 (0) | 2023.10.22 |
---|---|
ID가 짝수인 행을 선택 (0) | 2023.10.22 |
__() 및 sprintf()로 WP 변환 (0) | 2023.10.22 |
wordpress 데이터베이스 get_results에서 배열 값을 가져오는 방법 (0) | 2023.10.22 |
자바스크립트 window.location에 target="_blank"를 추가하는 방법? (0) | 2023.10.22 |