trabajar con XML

30/05/2007 - 18:02 por Clara | Informe spam
Hola,
Tengo que generar un archivo XML, del qual sé la estructura que debe tener.
Además, tengo el XSD.
Nunca he trabajado con xml, y desearia saber como crear un archivo xml y
llenarlo (no sé si el xsd me puede ayudar en algo).

El archivo debe ser algo asi
<DECLARACION Atributo1="" Atributo2="">
<BLOQUE atributo1 = "", ></BLOQUE>
</DECLARACION>

Supongo que debo crear nodos e irlos insertando. Pero no sé, por ejemplo,
como crear el primer nodo (DECLARACION)

He visto las clases xmlDocument, xmlWriter, ... pero no sé por dónde
empezar.

Grácias

Preguntas similare

Leer las respuestas

#1 Clara
31/05/2007 - 19:24 | Informe spam
Hola Alberto,
La cabecera <?xml...?> sí me la acepta.

El problema es que la clase que me ha generado XSD, empieza así:
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public class DECLARACION {
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("OTRAPERSONA")]
public OTRAPERSONA[] OTRAPERSONA;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("BLOQUE")]
public BLOQUE[] BLOQUE;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string TIPODECLARACION;


Aqui el namespace está vacio. Pero el XML que me genera XmlSerializar
enmpieza así:
<DECLARACION xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" TIPODECLARACION="14"
NUMERODECLARACION="" NUMEROCARTAPAGO="" MODELO="600 v1.1.4" PERIODO=""
ANYO="2005">
<OTRAPERSONA CODIGOEXTRANJERO="" CODIGOPAIS="ES" SIGLASVIAPUBLICA="AV"
TIPOPERSONA="SP" ESCALERA="" LOCALIDAD="TERRASSA" NIF="39170900Z"
CODIGOPOSTAL="08224" NUMEROEDIFICIOOPUNTOKILOMETRICO="55"
NOMBREVIAPUBLICA="TORRELLA" NOMBREORAZONSOCIAL="MIQUEL BUSOM MASJOAN"
PISO="2" SECUENCIA="1" PROVINCIAOPAIS="43" TELEFONO="937890821" PUERTA="">
<DATO VALOR="ES" CODIGO="PAIS" TIPO="T" />
<DATO VALOR="" CODIGO="EMAIL" TIPO="T" />
.
</DECLARACION>

Y no hay forma de que no me salga
"xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" dentro del nodo
<DECLARACION> (nodo raíz). Y esto, el programa que recibe el XML no lo
acepta. Dá error de archivo incorrecto. Si lo saco, funciona perfectamente.

Tienes alguna otra idea?

Muchas gracias.


"Alberto Poblacion"
escribió en el mensaje news:%
"Clara" wrote in message
news:
<?xml version="1.0" encoding="utf-8"?>
y, en el nodo root (en mi caso <DECLARACION>) me deja la linea así:
<DECLARACION xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
TIPODECLARACION="14" NUMERODECLARACION="" NUMEROCARTAPAGO="" MODELO="600
v1.1.4" PERIODO="" ANYO="2007">

El programa que espera al XML generado, se me queja por los añadidos (xml
version, xmlns xsd,.)
Es posible decirle que no genere todo esto?



El espacio de nombres (xmlns...) probablemente estaba definido en el
xsd que utilizaste como punto de partida, y el xsd.exe lo pasó dentro de
atributos a la clase generada. Busca en el fuente que te ha generado los
atributos [XmlType(Namespace=...)] y quítales el Namespace.

En cuanto a la cabecera "<?xml...?>", es obligatoria en los archivos
Xml. Si el programa que los lee no la entiende, es éste programa el que se
debería corregir. Pero si no está en tus manos el corregir esa parte,
entonces lo único que se me ocurre es hacer la "chapuza" de volver a leer
el archivo generado y quitarle esa linea. Para no tener que leerlo de
nuevo desde el disco, lo que se puede hacer es serializar sobre un
StringWriter para que quede en memoria, quitarle el trozo que sobra, y
luego ya volcarlo a un fichero.


Respuesta Responder a este mensaje
#2 Víctor Alameda
03/06/2007 - 16:49 | Informe spam
Hola Clara,

Te dejo un ejemplo de como crear un archivo XML, si necesitas más ayuda no
dudes en contactarme.

private void Page_Load(object sender, System.EventArgs e) {
string ConnectionString = ("Data Source=(local);Initial " + _);
"Catalog=AdventureWorks;Integrated Security=SSPI";
SqlConnection conn = new SqlConnection(ConnectionString);
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM
Sales.Customer", conn);
DataSet ds = new DataSet();
da.Fill(dsNorthwind);
// Creamos el archivo XML
ds.WriteXml("c:\\MisProductos.xml");
}


Saludos!
Víctor Alameda
DeveloperDotNet.com

"Clara" wrote:

Hola Alberto,
La cabecera <?xml...?> sí me la acepta.

El problema es que la clase que me ha generado XSD, empieza así:
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public class DECLARACION {
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("OTRAPERSONA")]
public OTRAPERSONA[] OTRAPERSONA;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("BLOQUE")]
public BLOQUE[] BLOQUE;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string TIPODECLARACION;
.

Aqui el namespace está vacio. Pero el XML que me genera XmlSerializar
enmpieza así:
<DECLARACION xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" TIPODECLARACION="14"
NUMERODECLARACION="" NUMEROCARTAPAGO="" MODELO="600 v1.1.4" PERIODO=""
ANYO="2005">
<OTRAPERSONA CODIGOEXTRANJERO="" CODIGOPAIS="ES" SIGLASVIAPUBLICA="AV"
TIPOPERSONA="SP" ESCALERA="" LOCALIDAD="TERRASSA" NIF="39170900Z"
CODIGOPOSTAL="08224" NUMEROEDIFICIOOPUNTOKILOMETRICO="55"
NOMBREVIAPUBLICA="TORRELLA" NOMBREORAZONSOCIAL="MIQUEL BUSOM MASJOAN"
PISO="2" SECUENCIA="1" PROVINCIAOPAIS="43" TELEFONO="937890821" PUERTA="">
<DATO VALOR="ES" CODIGO="PAIS" TIPO="T" />
<DATO VALOR="" CODIGO="EMAIL" TIPO="T" />
..
</DECLARACION>

Y no hay forma de que no me salga
"xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" dentro del nodo
<DECLARACION> (nodo raíz). Y esto, el programa que recibe el XML no lo
acepta. Dá error de archivo incorrecto. Si lo saco, funciona perfectamente.

Tienes alguna otra idea?

Muchas gracias.


"Alberto Poblacion"
escribió en el mensaje news:%
> "Clara" wrote in message
> news:
>> <?xml version="1.0" encoding="utf-8"?>
>> y, en el nodo root (en mi caso <DECLARACION>) me deja la linea así:
>> <DECLARACION xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> TIPODECLARACION="14" NUMERODECLARACION="" NUMEROCARTAPAGO="" MODELO="600
>> v1.1.4" PERIODO="" ANYO="2007">
>>
>> El programa que espera al XML generado, se me queja por los añadidos (xml
>> version, xmlns xsd,.)
>> Es posible decirle que no genere todo esto?
>
> El espacio de nombres (xmlns...) probablemente estaba definido en el
> xsd que utilizaste como punto de partida, y el xsd.exe lo pasó dentro de
> atributos a la clase generada. Busca en el fuente que te ha generado los
> atributos [XmlType(Namespace=...)] y quítales el Namespace.
>
> En cuanto a la cabecera "<?xml...?>", es obligatoria en los archivos
> Xml. Si el programa que los lee no la entiende, es éste programa el que se
> debería corregir. Pero si no está en tus manos el corregir esa parte,
> entonces lo único que se me ocurre es hacer la "chapuza" de volver a leer
> el archivo generado y quitarle esa linea. Para no tener que leerlo de
> nuevo desde el disco, lo que se puede hacer es serializar sobre un
> StringWriter para que quede en memoria, quitarle el trozo que sobra, y
> luego ya volcarlo a un fichero.
>
>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida