Por alguna razón el siguiente código produce XML que no contenga una declaración:¿Dónde está mi XDeclaration?
XDocument xDocument = new XDocument(new XDeclaration("1.0", "utf-8", "yes"),
new XElement("project",
new XAttribute("number", project.ProjectNumber),
new XElement("store",
new XAttribute("number", project.StoreNumber)
),
// User Element
new XElement("user",
new XAttribute("owner-id", project.OwnerID ?? 0),
new XElement("email", new XCData(project.OwnerEmail ?? "")),
new XElement("project-name", new XCData(project.ProjectName ?? ""))
),
// Nested Project Element
new XElement("nested-project",
new XAttribute("version", new Version(1, 0)),
new XElement("project",
new XAttribute("version", new Version(1, 0)),
xProjectItems = new XElement("project-items")
),
new XElement("price-per-part", project.PricePerPart),
new XElement("sheet-quantity", project.SheetQuantity),
new XElement("edge-length", project.EdgeLength),
new XElement("price", project.Price),
new XElement("status", project.Status),
xMaterialItems = new XElement("alternative-material-items"),
xProductItems = new XElement("project-product-items")
)
)
);
String strXML = xDocument.ToString();
Se ha producido una declaración antes. ¿Me estoy perdiendo algo obvio?
Gracias.
+1 Debería haber usado un StringWriter en mi respuesta. Doh! =] – rsbarro
Eso es cojo. No es tu solución (lo cual es genial, no me di cuenta de que podrías hacer eso con un 'StringWriter'). Es cojo que Microsoft hiciera eso. No guardo este XML en un archivo, lo paso a una transmisión. ¿Cuál es la diferencia entre un 'XDocument' y un 'XElement'? Quiero decir que es bueno que sean iguales, pero debería haber alguna distinción. Y si alguien no quiere la declaración en la cadena, simplemente podría hacer: 'xMyDocument.Root.ToString();' – Jordan
@Jordan Supongo que el razonamiento es que un XDocument representa un documento completo, y un XElement es un fragmento de XML. A pesar de eso, son muy similares. –