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