我有一个需要返回XML字符串的WCF服务.但似乎作者只想建立一个文件而不是字符串.我试过了:
string nextXMLstring = "";
using (XmlWriter writer = XmlWriter.Create(nextXMLstring))
Run Code Online (Sandbox Code Playgroud)
这会产生一个错误,说明nextXMLstring没有文件路径.它需要类似的东西:
using (XmlWriter writer = XmlWriter.Create("nextXMLstring.xml"))
Run Code Online (Sandbox Code Playgroud)
如何构建我的XML然后将其作为字符串返回?
谢谢!!
Ric*_*ard 209
您需要创建一个StringWriter,并将其传递给XmlWriter.
XmlWriter.Create的字符串重载用于文件名.
例如
using (var sw = new StringWriter()) {
using (var xw = XmlWriter.Create(sw)) {
// Build Xml with xw.
}
return sw.ToString();
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 110
正如理查德所说,StringWriter是前进的方向.然而,有一个障碍:默认情况下,StringWriter会将自己宣传为UTF-16.通常 XML是UTF-8.您可以通过继承StringWriter来解决这个问题.
public class Utf8StringWriter : StringWriter
{
public override Encoding Encoding
{
get { return Encoding.UTF8; }
}
}
Run Code Online (Sandbox Code Playgroud)
这将影响所写的声明XmlWriter.当然,如果你以二进制形式将字符串写在别处,请确保使用的编码与您为其修复的编码相匹配StringWriter.(上面的代码总是假定为UTF-8;在构造函数中创建一个接受编码的更通用的版本是微不足道的.)
然后你用:
using (TextWriter writer = new Utf8StringWriter())
{
using (XmlWriter xmlWriter = XmlWriter.Create(writer))
{
...
}
return writer.ToString();
}
Run Code Online (Sandbox Code Playgroud)
bri*_*ary 29
我知道这是旧的并且回答了,但这是另一种方法.特别是如果您不希望字符串开头的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());
}
Run Code Online (Sandbox Code Playgroud)
Ria*_*Ria 12
用途StringBuilder:
var sb = new StringBuilder();
using (XmlWriter xmlWriter = XmlWriter.Create(sb))
{
...
}
return sb.ToString();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
120181 次 |
| 最近记录: |