相关疑难解决方法(0)

如何使用XDocument打印<?xml version ="1.0"?>

有没有办法让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.

c# xml linq-to-xml

61
推荐指数
3
解决办法
4万
查看次数

强制XDocument使用UTF-8编码写入String

我希望能够使用声明和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)

c# xml utf-8 linq-to-xml

36
推荐指数
1
解决办法
4万
查看次数

Xdocument不打印声明

我尝试使用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 ...任何提示?

xml asp.net linq-to-xml c#-3.0

16
推荐指数
2
解决办法
1万
查看次数

TextWriter序列化为UTF-8字符串

我使用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编码

c# serialization utf-8

7
推荐指数
1
解决办法
7354
查看次数

标签 统计

c# ×3

linq-to-xml ×3

xml ×3

utf-8 ×2

asp.net ×1

c#-3.0 ×1

serialization ×1