Возможно ли сократить XDeclaration XDocument?

#c# #.net #xml #quickbooks-online

#c# #.net #xml #quickbooks-онлайн

Вопрос:

Я добавляю XDeclaration в свой Xdocument следующим образом:

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

Это дает мне результат:

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

Я создаю XML для торговых служб Quickbooks, поэтому мне нужно только:

 <?xml version="1.0"?>
  

Возможно ли это сделать?

Ответ №1:

Вы можете попробовать использовать пользовательский 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 />
  

Ответ №2:

Мне все равно нужно было преобразовать его в строку, поэтому я заменил текст, который я не хотел оставлять там:

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

Ответ №3:

Установите значение encoding и standalone равным null:

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

даст

 <?xml version="1.0"?>
  

Ответ №4:

Это работает.

 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 />