Xdocument不打印声明

Eri*_*ick 16 xml asp.net linq-to-xml c#-3.0

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

Cod*_*nis 16

你是如何打印出你的内容的XDocument

.ToString()方法不包括xml标头,但.Save()方法可以.

编辑:这里给出相同的答案.

  • 你找到了解决UTF-16问题的方法吗?我经历了同样的事情.我想这是因为.NET中的字符串是UTF-16,如果你不编码为字节序列,它将始终是UTF-16? (3认同)

Fre*_*örk 10

你怎么保存它?如果我执行以下操作,xml声明应该出现:

XDocument xDocument = new XDocument(
    new XDeclaration("1.0", "UTF-8", "yes"),
    new XElement("Books"));
xDocument.Save(@"c:\temp\file.xml");
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Books />
Run Code Online (Sandbox Code Playgroud)

但是,如果我改为传递XmlWriter实例,似乎该XmlWriter的设置会覆盖XDocument中声明的内容:

XDocument xDocument = new XDocument(
    new XDeclaration("1.0", "UTF-8", "yes"),
    new XElement("Books"));
StringBuilder sb = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(sb))
{
    xDocument.Save(writer);
}
Console.WriteLine(sb.ToString());
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

<?xml version="1.0" encoding="utf-16" standalone="yes"?><Books />
Run Code Online (Sandbox Code Playgroud)

请注意编码如何更改为"utf-16"并且缩进已更改.如果添加指示编码的XmlWriterSettings实例(以及您要控制的任何其他设置),则会获得更好的结果.以下代码符合您的期望:

XDocument xDocument = new XDocument(
    new XDeclaration("1.0", "UTF-8", "yes"),
    new XElement("Books"));
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
settings.ConformanceLevel = ConformanceLevel.Document;
settings.Indent = true;

using (XmlWriter writer = XmlWriter.Create(@"c:\temp\xdocument.xml", settings))
{
    xDocument.Save(writer);
}
Run Code Online (Sandbox Code Playgroud)

输出:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Books />
Run Code Online (Sandbox Code Playgroud)