c# - permitida - Cómo hacer el resultado de la consulta SQL al archivo xml
for xml sql (5)
Tengo una consulta SQL, selecciona algunos datos de una tabla.
ID Name Number Email
1 a 123 [email protected]
2 b 321 [email protected]
3 c 432 [email protected]
Obtengo estos datos de la tabla. Quiero crear un archivo xml a partir de los datos. Me gusta esto
<Students>
<Student>
<id>1</id>
<name>a</name>
<number>123</number>
<email>[email protected]</email>
</Student>
<Student>
<id>2</id>
<name>b</name>
<number>321</number>
<email>[email protected]</email>
</Student>
<Student>
<id>3</id>
<name>c</name>
<number>432</number>
<email>[email protected]</email>
</Student>
</Students>
¿Cómo puedo hacerlo en C # y SQL Server?
1) Crear clase llamada alumno.
[Serializable]
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public int Number { get; set; }
public string Email { get; set; }
}
2) Obtener datos en la lista llamada StudentList
de la base de datos
3) Luego abra o cree un archivo xml y agregue valores
using (XmlWriter writer = XmlWriter.Create("Student.xml"))
{
writer.WriteStartDocument();
writer.WriteStartElement("Students");
foreach (Student student in StudentList)
{
writer.WriteStartElement("Student");
writer.WriteElementString("id", student.ID.ToString());
writer.WriteElementString("name", student.Name.ToString());
writer.WriteElementString("number", student.Number.ToString());
writer.WriteElementString("email", student.Email.ToString());
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndDocument();
}
Aunque la solución provista por marc es exactamente lo que necesita, es posible que desee examinar más detenidamente las diversas opciones del artículo Uso de la cláusula FOR XML para devolver los resultados de la consulta como XML .
Prueba esto:
SELECT *
FROM dbo.YourStudentTable
FOR XML PATH(''Student''), ROOT (''Students'')
Esto debería devolver exactamente el XML que está buscando ( asumiendo que tiene SQL Server 2005 o más reciente)
Lea más sobre cómo usar FOR XML PATH
y sus capacidades en TechNet
Puede usar la función DataSet.GetXml()
para obtener resultados en un archivo de formato XML
SQL Server : solo una adición a la respuesta de @marc_s : tenga en cuenta que xml distingue entre mayúsculas y minúsculas, y el xml resultante se verá así
<Students>
<Student>
<ID>1</ID>
<Name>a</Name>
<Number>123</Number>
<Email>[email protected]</Email>
</Student>
</Students>
y si intentas recuperar la id
, no encontrarás nada.
Es posible que desee hacer algo como esto:
select
ID as id,
Name as name,
Number as number,
Email as email
from dbo.Table1
for xml path(''Student''), root(''Students'')
C # : puedes usar el método WriteXml :
var ds = new DataSet("Students");
var dt = ds.Tables.Add("Student");
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("name", typeof(string));
dt.Columns.Add("number", typeof(string));
dt.Columns.Add("email", typeof(string));
dt.Rows.Add(1, "a", "123", "[email protected]");
dt.Tables[0].Rows.Add(2, "b", "321", "[email protected]");
dt.Tables[0].Rows.Add(3, "c", "432", "[email protected]");
var stream = new StringWriter();
ds.WriteXml(stream);
o usando Linq a XML:
new XElement("Students", dt.AsEnumerable().Select(r =>
new XElement("Student",
new XElement("id", r["id"]),
new XElement("name", r["name"]),
new XElement("number", r["number"]),
new XElement("email", r["email"])
)));