有没有办法让XDocument在使用ToString方法时打印xml版本?输出这样的东西:
<?xml version="1.0"?>
<!DOCTYPE ELMResponse [
]>
<Response>
<Error> ...
Run Code Online (Sandbox Code Playgroud)
我有以下内容:
var xdoc = new XDocument(new XDocumentType("Response", null, null, "\n"), ...
Run Code Online (Sandbox Code Playgroud)
这将打印出这个很好的,但它缺少如上所述的"<?xml版本".
<!DOCTYPE ELMResponse [
]>
<Response>
<Error> ...
Run Code Online (Sandbox Code Playgroud)
我知道你可以通过手动输出我自己来做到这一点.只是想知道是否可以使用XDocument.
我希望能够使用声明和UTF-8编码将XML写入String.这似乎很难完成.
我已经阅读了一些并尝试了一些流行的答案,但他们都有问题.我当前的代码正确输出为UTF-8但不保持XDocument的原始格式(即缩进/空格)!
有人可以提供一些建议吗?
XDocument xml = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), xelementXML);
MemoryStream ms = new MemoryStream();
using (XmlWriter xw = new XmlTextWriter(ms, Encoding.UTF8))
{
xml.Save(xw);
xw.Flush();
StreamReader sr = new StreamReader(ms);
ms.Seek(0, SeekOrigin.Begin);
String xmlString = sr.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)
XML要求格式化与格式化格式相同,.ToString()
即
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<root>
<node>blah</node>
</root>
Run Code Online (Sandbox Code Playgroud)
我现在看到的是
<?xml version="1.0" encoding="utf-8" standalone="yes"?><root><node>blah</node></root>
Run Code Online (Sandbox Code Playgroud)
更新
我已经设法通过添加XmlTextWriter
设置让这个工作...虽然看起来非常笨重!
MemoryStream ms = new MemoryStream();
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
settings.ConformanceLevel = ConformanceLevel.Document;
settings.Indent = true;
using (XmlWriter xw …
Run Code Online (Sandbox Code Playgroud) 我尝试使用domainpeople.com API,我需要使用XML.
目前我有一个错误说"找不到apiProtocol"我想那时我的Xml文档格式不正确.
发送的当前xml是:
<apiProtocol version="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNameSpaceSchemaLocation="checkrequest.xsd">
<checkRequest user="ifuzion" password="fish4gold121" reference="123456789">
<domain name="google.com" />
</checkRequest>
</apiProtocol>
Run Code Online (Sandbox Code Playgroud)
显然这<?xml?>
部分不会打印出来.
我的代码基本上类似于:
XDocument xDocument = new XDocument(
new XDeclaration("1.0", "UTF-8", "yes"),
new XElement("Books"));
Run Code Online (Sandbox Code Playgroud)
(我删除了我的代码以获得简单的问题,但结构完全相似).
XDocument没有打印出<?xml?>
部件的原因是什么?似乎使用XmlDocument它可以工作但不能与XDocument ...任何提示?
我使用TextWriter进行序列化,因为在字符串序列化和文件序列化之间切换很容易:
序列化为字符串;
TextWriter stringWriter = new StringWriter();
XmlSerializer serializer = XmlSerializer(typeof(ObjectType))
serializer.Serialize(stringWriter , objetToSerialize)
return stringWriter.ToString();
Run Code Online (Sandbox Code Playgroud)
序列化为文件;
TextWriter fileWriter = new StreamWriter(targetXMLFileName, true, Encoding.UTF8);
XmlSerializer serializer = XmlSerializer(typeof(ObjectType))
serializer.Serialize(fileWriter , objetToSerialize)
fileWriter.Close();
Run Code Online (Sandbox Code Playgroud)
我的问题是,当序列化为字符串时,它会创建一个UTF-16("?xml version ="1.0"encoding ="utf-16"?"),而TestWriter编码属性是ReadOnly
我试过了:
var memoryStream = new MemoryStream();
TextWriter stringWriter = new StreamWriter(memoryStream, System.Text.Encoding.UTF8);
XmlSerializer serializer = XmlSerializer(typeof(ObjectType))
serializer.Serialize(stringWriter , objetToSerialize)
return stringWriter.ToString();
Run Code Online (Sandbox Code Playgroud)
但它不起作用.它生成此字符串而不是XML文档:"System.IO.StreamWriter"O_o
如何将TextWriter初始化为UTF-8编码