是否可以缩短XDocument的XDeclaration ?

本文关键字:XDeclaration XDocument 是否 | 更新日期: 2023-09-27 18:08:57

我添加一个XDeclaration到我的Xdocument如下:

XDocument xml = new XDocument(new XDeclaration("1.0", "utf-8", "yes")

结果如下:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

我正在为Quickbooks商家服务构建XML,所以我只需要:

<?xml version="1.0"?>

这是可能的吗?

是否可以缩短XDocument的XDeclaration ?

您可以尝试使用不提供任何编码的自定义StringWriter,例如:

public class StringWriterNoEncoding : StringWriter
{
    public override Encoding Encoding
    {
        get { return null; }
    }
}

然后使用StringWriterNoEncoding打印XML:

XDocument xdoc = new XDocument(new XDeclaration("1.0", "", ""), new XElement("Root"));
var sw = new StringWriterNoEncoding();
xdoc.Save(sw);
Console.WriteLine(sw.ToString());
//above will print :
//<?xml version="1.0"?>
//<Root />

无论如何我都需要将其转换为字符串,所以我对不想留在那里的文本进行了替换:

string xmlString = xml.Declaration.ToString() + "'n" + xml.ToString();
xmlString = xmlString.Replace(@" encoding=""utf-8"" standalone=""yes""", "");

设置编码和独立为null:

XDocument xml = new XDocument(new XDeclaration("1.0", null, null)

会给

<?xml version="1.0"?>

可以了

void Main() {
    XDocument xml = new XDocument(new XDeclaration("1.0", "utf-8", ""), new XElement("Root"));
    var sw = new UTF8StringWriter();
    xml.Save(sw);
    Console.WriteLine(sw.GetStringBuilder().ToString());    
}
private class UTF8StringWriter : StringWriter {
    public override Encoding Encoding { get { return Encoding.UTF8; } }
}
输出:

<?xml version="1.0" encoding="utf-8"?> <Root />