Como fazer o resultado da pesquisa sql para o arquivo xml
tenho uma consulta sql, selecciona alguns dados de uma tabela.
ID Name Number Email
1 a 123 [email protected]
2 b 321 [email protected]
3 c 432 [email protected]
Tenho estes dados da mesa. Quero criar um ficheiro xml a partir dos dados. Assim.
<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>
Como posso fazê-lo no servidor C e SQL ?
5 answers
Tenta isto:
SELECT *
FROM dbo.YourStudentTable
FOR XML PATH('Student'), ROOT ('Students')
Isto deve devolver exactamente o XML que procura (assumindo que tem um servidor de SQL2005 ou mais recente)
Leia mais sobre como utilizar FOR XML PATH
e as suas capacidades no TechNet
SQL Server : apenas uma adição à resposta @marc_s - lembre-se que o xml é sensível à capitalização, e o xml resultante parecerá com
<Students>
<Student>
<ID>1</ID>
<Name>a</Name>
<Number>123</Number>
<Email>[email protected]</Email>
</Student>
</Students>
E se tentares recuperar, não vais encontrar nada.
Você pode querer fazer algo assim:
select
ID as id,
Name as name,
Number as number,
Email as email
from dbo.Table1
for xml path('Student'), root('Students')
C#: pode utilizar WriteXml método:
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);
Ou usando o Linq para 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"])
)));
1) Criar uma classe chamada estudante
[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) Obter Dados na lista chamada StudentList
a partir da Base de dados
3)Abrir ou criar um ficheiro xml e adicionar 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();
}
Embora a solução fornecida pelo marc seja exactamente o que necessita, poderá querer analisar mais aprofundadamente várias opções no artigo {[[2]}, Usando a cláusula FOR XML para devolver os resultados da pesquisa como XML .
Pode usar a função DataSet.GetXml()
para obter o resultado no ficheiro de formato XML