XML y C#
Publicado por Panchubi (1 intervención) el 14/12/2008 18:52:33
Hola
quiero escribir un XML. Para esto uso una definición .DTD como sigue:
<?xml version="1.0" encoding="utf-8"?>
<!ELEMENT Errores (Superado, ProbNF, ProbNA, ProblemasDur, ProblemasDin, Compas+)>
<!ELEMENT Superado (#PCDATA)>
<!ELEMENT ProbNF (#PCDATA)>
<!ELEMENT ProbNA (#PCDATA)>
<!ELEMENT ProblemasDur (#PCDATA)>
<!ELEMENT ProblemasDin (#PCDATA)>
<!ELEMENT Compas (NCompas, Error+)>
<!ELEMENT NCompas (#PCDATA)>
<!ELEMENT Error (Tipo,Parte, Mano, Texto)>
<!ELEMENT Tipo (#PCDATA)>
<!ELEMENT Parte (#PCDATA)>
<!ELEMENT Mano (#PCDATA)>
<!ELEMENT Texto (#PCDATA)>
Y lo escribo en C# así:
// Write the root element.
writer.WriteStartElement("Errores");
writer.WriteElementString("Superado","Ejercicio Superado");
writer.WriteElementString("ProbNF","Problemas de Notas Falsas: " + problemasNotaFalsa);
writer.WriteElementString("ProbNA","Problemas de Notas no interpretadas: " + problemasNotasAusentes);
writer.WriteElementString("ProblemasDur","Problemas de Duración: " + problemasDuracion);
writer.WriteElementString("ProblemasDin","Problemas de Dinámica: " + problemasDinamicas);
for(int j=1;j<=errores.Count;j++)
{
if(((ArrayList)errores[j]).Count>0){
writer.WriteStartElement("Compas");
writer.WriteElementString("NCompas","Compás " +j );
for (int i = 0; i < ((ArrayList)errores[j]).Count;i++ ){
writer.WriteStartElement("Error");
writer.WriteElementString("Tipo",""+((Error)((ArrayList)errores[j])[i]).Tipo);
writer.WriteElementString("Compas",""+((Error)((ArrayList)errores[j])[i]).Compas);
writer.WriteElementString("Parte",""+((Error)((ArrayList)errores[j])[i]).Parte);
writer.WriteElementString("Mano",((Error)((ArrayList)errores[j])[i]).Mano);
writer.WriteElementString("Texto",((Error)((ArrayList)errores[j])[i]).Texto);
writer.WriteEndAttribute();
}
writer.WriteEndAttribute();
}
}
writer.WriteEndAttribute();
writer.WriteEndDocument();
En writer.WriteEndAttribute(); tengo un fallo en tiempo de ejecución:
Excepción no controlada del tipo 'System.InvalidOperationException' en System.Xml.dll
Información adicional: El símbolo (token) EndAttribute en el estado Element Content resultaría en un documento XML no válido.
Parece que lo que quiero escribir no está acorde con la definición DTD, pero yo creo que si, no veo el problema.
Si alguien me puede echar una mano.
Gracias
quiero escribir un XML. Para esto uso una definición .DTD como sigue:
<?xml version="1.0" encoding="utf-8"?>
<!ELEMENT Errores (Superado, ProbNF, ProbNA, ProblemasDur, ProblemasDin, Compas+)>
<!ELEMENT Superado (#PCDATA)>
<!ELEMENT ProbNF (#PCDATA)>
<!ELEMENT ProbNA (#PCDATA)>
<!ELEMENT ProblemasDur (#PCDATA)>
<!ELEMENT ProblemasDin (#PCDATA)>
<!ELEMENT Compas (NCompas, Error+)>
<!ELEMENT NCompas (#PCDATA)>
<!ELEMENT Error (Tipo,Parte, Mano, Texto)>
<!ELEMENT Tipo (#PCDATA)>
<!ELEMENT Parte (#PCDATA)>
<!ELEMENT Mano (#PCDATA)>
<!ELEMENT Texto (#PCDATA)>
Y lo escribo en C# así:
// Write the root element.
writer.WriteStartElement("Errores");
writer.WriteElementString("Superado","Ejercicio Superado");
writer.WriteElementString("ProbNF","Problemas de Notas Falsas: " + problemasNotaFalsa);
writer.WriteElementString("ProbNA","Problemas de Notas no interpretadas: " + problemasNotasAusentes);
writer.WriteElementString("ProblemasDur","Problemas de Duración: " + problemasDuracion);
writer.WriteElementString("ProblemasDin","Problemas de Dinámica: " + problemasDinamicas);
for(int j=1;j<=errores.Count;j++)
{
if(((ArrayList)errores[j]).Count>0){
writer.WriteStartElement("Compas");
writer.WriteElementString("NCompas","Compás " +j );
for (int i = 0; i < ((ArrayList)errores[j]).Count;i++ ){
writer.WriteStartElement("Error");
writer.WriteElementString("Tipo",""+((Error)((ArrayList)errores[j])[i]).Tipo);
writer.WriteElementString("Compas",""+((Error)((ArrayList)errores[j])[i]).Compas);
writer.WriteElementString("Parte",""+((Error)((ArrayList)errores[j])[i]).Parte);
writer.WriteElementString("Mano",((Error)((ArrayList)errores[j])[i]).Mano);
writer.WriteElementString("Texto",((Error)((ArrayList)errores[j])[i]).Texto);
writer.WriteEndAttribute();
}
writer.WriteEndAttribute();
}
}
writer.WriteEndAttribute();
writer.WriteEndDocument();
En writer.WriteEndAttribute(); tengo un fallo en tiempo de ejecución:
Excepción no controlada del tipo 'System.InvalidOperationException' en System.Xml.dll
Información adicional: El símbolo (token) EndAttribute en el estado Element Content resultaría en un documento XML no válido.
Parece que lo que quiero escribir no está acorde con la definición DTD, pero yo creo que si, no veo el problema.
Si alguien me puede echar una mano.
Gracias
Valora esta pregunta


0