Herencia a XmlNode

23/05/2004 - 19:54 por Roberto G.A. | Informe spam
Una preguntilla, si quisiera crear una clase que heredara de XmlNode para
añadirle cierta funcionalidad que me interesa, ¿como podría hacer esto?

Hago esto pero me genera un error que no se como arreglar. seguro que es
una tontería pero ;-)
gracias de antemano.
Roberto G.A.

********************************************************
using System;
using System.Xml;

namespace Izpano.XmlDocuments
{
public class XmlNodes : System.Xml.XmlNode
{
public override string LocalName
{
get
{
return null;
}
}

public override string Name
{
get
{
return null;
}
}

public override XmlNode CloneNode(bool deep)
{
return null;
}

public override XmlNodeType NodeType
{
get
{
return new XmlNodeType ();
}
}

public override void WriteContentTo(XmlWriter w)
{

}

public override void WriteTo(XmlWriter w)
{

}

}
}
************************************************

Preguntas similare

Leer las respuestas

#6 Roberto G.A.
24/05/2004 - 18:34 | Informe spam
Pues vaya :( de todas formas muchas gracias Diego por la solución.


Saludos,
Roberto G.A.


"Diego Gonzalez" wrote in message
news:
No se puede extender XmlNode porque no tiene un constrcutor "public" o
"protected", es decir que la clase derivada no puede construir la clase


base
y eso es similar a que la clase sea "sealed" cuando se quiere extender


desde
otro assembly.

Si bien XmlNode es abstract, es decir, está hecha para ser derivada, no


está
pensada para ser derivada por cualquier aplicación.

Suerte,
Diego Gonzalez
Lagash Systems SA

"Roberto G.A." wrote in message
news:
> El error que me da es.
> "error CS0122: 'System.Xml.XmlNode.XmlNode()' is inaccessible due to its
> protection level"
>
> Se me había olvidado indicarlo, gracias Octavio.
> Roberto G.A.
>
>
> "Octavio Hernandez" wrote in message
> news:#
> >
> > ¿Cuál es el mensaje de error que recibes?
> >
> > Slds - Octavio
> >
> > "Roberto G.A." escribió en el mensaje
> > news:ui%
> > > Una preguntilla, si quisiera crear una clase que heredara de XmlNode
> para
> > > añadirle cierta funcionalidad que me interesa, ¿como podría hacer
esto?
> > >
> > > Hago esto pero me genera un error que no se como arreglar.


seguro
> que
> > es
> > > una tontería pero ;-)
> > > gracias de antemano.
> > > Roberto G.A.
> > >
> > > ********************************************************
> > > using System;
> > > using System.Xml;
> > >
> > > namespace Izpano.XmlDocuments
> > > {
> > > public class XmlNodes : System.Xml.XmlNode
> > > {
> > > public override string LocalName
> > > {
> > > get
> > > {
> > > return null;
> > > }
> > > }
> > >
> > > public override string Name
> > > {
> > > get
> > > {
> > > return null;
> > > }
> > > }
> > >
> > > public override XmlNode CloneNode(bool deep)
> > > {
> > > return null;
> > > }
> > >
> > > public override XmlNodeType NodeType
> > > {
> > > get
> > > {
> > > return new XmlNodeType ();
> > > }
> > > }
> > >
> > > public override void WriteContentTo(XmlWriter w)
> > > {
> > >
> > > }
> > >
> > > public override void WriteTo(XmlWriter w)
> > > {
> > >
> > > }
> > >
> > > }
> > > }
> > > ************************************************
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#7 Diego Gonzalez
24/05/2004 - 18:42 | Informe spam
Para que necesitas extender XmlNode?

DiegoG

"Roberto G.A." wrote in message
news:
Pues vaya :( de todas formas muchas gracias Diego por la solución.


Saludos,
Roberto G.A.


"Diego Gonzalez" wrote in message
news:
> No se puede extender XmlNode porque no tiene un constrcutor "public" o
> "protected", es decir que la clase derivada no puede construir la clase
base
> y eso es similar a que la clase sea "sealed" cuando se quiere extender
desde
> otro assembly.
>
> Si bien XmlNode es abstract, es decir, está hecha para ser derivada, no
está
> pensada para ser derivada por cualquier aplicación.
>
> Suerte,
> Diego Gonzalez
> Lagash Systems SA
>
> "Roberto G.A." wrote in message
> news:
> > El error que me da es.
> > "error CS0122: 'System.Xml.XmlNode.XmlNode()' is inaccessible due to


its
> > protection level"
> >
> > Se me había olvidado indicarlo, gracias Octavio.
> > Roberto G.A.
> >
> >
> > "Octavio Hernandez" wrote in message
> > news:#
> > >
> > > ¿Cuál es el mensaje de error que recibes?
> > >
> > > Slds - Octavio
> > >
> > > "Roberto G.A." escribió en el mensaje
> > > news:ui%
> > > > Una preguntilla, si quisiera crear una clase que heredara de


XmlNode
> > para
> > > > añadirle cierta funcionalidad que me interesa, ¿como podría hacer
> esto?
> > > >
> > > > Hago esto pero me genera un error que no se como arreglar.
seguro
> > que
> > > es
> > > > una tontería pero ;-)
> > > > gracias de antemano.
> > > > Roberto G.A.
> > > >
> > > > ********************************************************
> > > > using System;
> > > > using System.Xml;
> > > >
> > > > namespace Izpano.XmlDocuments
> > > > {
> > > > public class XmlNodes : System.Xml.XmlNode
> > > > {
> > > > public override string LocalName
> > > > {
> > > > get
> > > > {
> > > > return null;
> > > > }
> > > > }
> > > >
> > > > public override string Name
> > > > {
> > > > get
> > > > {
> > > > return null;
> > > > }
> > > > }
> > > >
> > > > public override XmlNode CloneNode(bool deep)
> > > > {
> > > > return null;
> > > > }
> > > >
> > > > public override XmlNodeType NodeType
> > > > {
> > > > get
> > > > {
> > > > return new XmlNodeType ();
> > > > }
> > > > }
> > > >
> > > > public override void WriteContentTo(XmlWriter w)
> > > > {
> > > >
> > > > }
> > > >
> > > > public override void WriteTo(XmlWriter w)
> > > > {
> > > >
> > > > }
> > > >
> > > > }
> > > > }
> > > > ************************************************
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#8 Roberto G.A.
24/05/2004 - 22:49 | Informe spam
Bueno, más que extenderla, más bien quería personalizarla..
Supongamos que accedo a un nodo de un xml que tiene un formato establecido,
supongamos:

nodo: <contacto id='1' nombre='Luperio' estado='0'>

al consumir dicho nodo con una clase que heredara de XmlNode lo que quería
hacer es facilitar el acceso a sus
atributos, dándoles tipado a los mismos, algo como esto:

XmlNodoContacto contacto = new XmlNodoContacto(nodo); //Constructor con el
nodo en cuestión

//El atributo es un entero, se convierte el atributo del nodo al tipo
indicado y así respectivamente
Console.WriteLine(contacto.atributo_id.ToString());
Console.WriteLine(contacto.atributo_nombre);
Console.WriteLine(contacto.atributo_estado.ToString());

Esto es solo un ejemplo, también serviría para encapsular determinadas
operaciones con datos de un nodo para facilitar la programación,
por ejemplo una serie de nodos que guardaran un atributo importe y quisiera
un atributo generico de la clase que calculara el total de las mismas y
muchas cosas más.

Vamos en definitiva, una serie de nodos definidos que facilitaran el acceso
y la gestión de documentos xml con una estructura definida.
Lo que ahora haré, es dividirlo en pequeños documentos xml XmlDocument.

No sé si me he explicado bien, o es una locura pero bueno, quería
hacerlo.

Gracias por todo Diego.
Roberto G.A.

"Diego Gonzalez" wrote in message
news:
Para que necesitas extender XmlNode?

DiegoG

"Roberto G.A." wrote in message
news:
> Pues vaya :( de todas formas muchas gracias Diego por la solución.
>
>
> Saludos,
> Roberto G.A.
>
>
> "Diego Gonzalez" wrote in message
> news:
> > No se puede extender XmlNode porque no tiene un constrcutor "public" o
> > "protected", es decir que la clase derivada no puede construir la


clase
> base
> > y eso es similar a que la clase sea "sealed" cuando se quiere extender
> desde
> > otro assembly.
> >
> > Si bien XmlNode es abstract, es decir, está hecha para ser derivada,


no
> está
> > pensada para ser derivada por cualquier aplicación.
> >
> > Suerte,
> > Diego Gonzalez
> > Lagash Systems SA
> >
> > "Roberto G.A." wrote in message
> > news:
> > > El error que me da es.
> > > "error CS0122: 'System.Xml.XmlNode.XmlNode()' is inaccessible due to
its
> > > protection level"
> > >
> > > Se me había olvidado indicarlo, gracias Octavio.
> > > Roberto G.A.
> > >
> > >
> > > "Octavio Hernandez" wrote in message
> > > news:#
> > > >
> > > > ¿Cuál es el mensaje de error que recibes?
> > > >
> > > > Slds - Octavio
> > > >
> > > > "Roberto G.A." escribió en el mensaje
> > > > news:ui%
> > > > > Una preguntilla, si quisiera crear una clase que heredara de
XmlNode
> > > para
> > > > > añadirle cierta funcionalidad que me interesa, ¿como podría


hacer
> > esto?
> > > > >
> > > > > Hago esto pero me genera un error que no se como arreglar.
> seguro
> > > que
> > > > es
> > > > > una tontería pero ;-)
> > > > > gracias de antemano.
> > > > > Roberto G.A.
> > > > >
> > > > > ********************************************************
> > > > > using System;
> > > > > using System.Xml;
> > > > >
> > > > > namespace Izpano.XmlDocuments
> > > > > {
> > > > > public class XmlNodes : System.Xml.XmlNode
> > > > > {
> > > > > public override string LocalName
> > > > > {
> > > > > get
> > > > > {
> > > > > return null;
> > > > > }
> > > > > }
> > > > >
> > > > > public override string Name
> > > > > {
> > > > > get
> > > > > {
> > > > > return null;
> > > > > }
> > > > > }
> > > > >
> > > > > public override XmlNode CloneNode(bool deep)
> > > > > {
> > > > > return null;
> > > > > }
> > > > >
> > > > > public override XmlNodeType NodeType
> > > > > {
> > > > > get
> > > > > {
> > > > > return new XmlNodeType ();
> > > > > }
> > > > > }
> > > > >
> > > > > public override void WriteContentTo(XmlWriter w)
> > > > > {
> > > > >
> > > > > }
> > > > >
> > > > > public override void WriteTo(XmlWriter w)
> > > > > {
> > > > >
> > > > > }
> > > > >
> > > > > }
> > > > > }
> > > > > ************************************************
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#9 Diego Gonzalez
26/05/2004 - 15:13 | Informe spam
También puedes generar una clase con XSD.EXE a partir de esquema y usar
XmlSerializer para leer el Xml sobre la clase y te olvidas de DOM. Es una
idea.

Saludos,
Diego Gonzalez
Lagash Systems SA

"Roberto G.A." wrote in message
news:
Bueno, más que extenderla, más bien quería personalizarla..
Supongamos que accedo a un nodo de un xml que tiene un formato


establecido,
supongamos:

nodo: <contacto id='1' nombre='Luperio' estado='0'>

al consumir dicho nodo con una clase que heredara de XmlNode lo que quería
hacer es facilitar el acceso a sus
atributos, dándoles tipado a los mismos, algo como esto:

XmlNodoContacto contacto = new XmlNodoContacto(nodo); //Constructor con


el
nodo en cuestión

//El atributo es un entero, se convierte el atributo del nodo al tipo
indicado y así respectivamente
Console.WriteLine(contacto.atributo_id.ToString());
Console.WriteLine(contacto.atributo_nombre);
Console.WriteLine(contacto.atributo_estado.ToString());

Esto es solo un ejemplo, también serviría para encapsular determinadas
operaciones con datos de un nodo para facilitar la programación,
por ejemplo una serie de nodos que guardaran un atributo importe y


quisiera
un atributo generico de la clase que calculara el total de las mismas


y
muchas cosas más.

Vamos en definitiva, una serie de nodos definidos que facilitaran el


acceso
y la gestión de documentos xml con una estructura definida.
Lo que ahora haré, es dividirlo en pequeños documentos xml XmlDocument.

No sé si me he explicado bien, o es una locura pero bueno, quería
hacerlo.

Gracias por todo Diego.
Roberto G.A.

"Diego Gonzalez" wrote in message
news:
> Para que necesitas extender XmlNode?
>
> DiegoG
>
> "Roberto G.A." wrote in message
> news:
> > Pues vaya :( de todas formas muchas gracias Diego por la solución.
> >
> >
> > Saludos,
> > Roberto G.A.
> >
> >
> > "Diego Gonzalez" wrote in message
> > news:
> > > No se puede extender XmlNode porque no tiene un constrcutor "public"


o
> > > "protected", es decir que la clase derivada no puede construir la
clase
> > base
> > > y eso es similar a que la clase sea "sealed" cuando se quiere


extender
> > desde
> > > otro assembly.
> > >
> > > Si bien XmlNode es abstract, es decir, está hecha para ser derivada,
no
> > está
> > > pensada para ser derivada por cualquier aplicación.
> > >
> > > Suerte,
> > > Diego Gonzalez
> > > Lagash Systems SA
> > >
> > > "Roberto G.A." wrote in message
> > > news:
> > > > El error que me da es.
> > > > "error CS0122: 'System.Xml.XmlNode.XmlNode()' is inaccessible due


to
> its
> > > > protection level"
> > > >
> > > > Se me había olvidado indicarlo, gracias Octavio.
> > > > Roberto G.A.
> > > >
> > > >
> > > > "Octavio Hernandez" wrote in message
> > > > news:#
> > > > >
> > > > > ¿Cuál es el mensaje de error que recibes?
> > > > >
> > > > > Slds - Octavio
> > > > >
> > > > > "Roberto G.A." escribió en el


mensaje
> > > > > news:ui%
> > > > > > Una preguntilla, si quisiera crear una clase que heredara de
> XmlNode
> > > > para
> > > > > > añadirle cierta funcionalidad que me interesa, ¿como podría
hacer
> > > esto?
> > > > > >
> > > > > > Hago esto pero me genera un error que no se como arreglar.
> > seguro
> > > > que
> > > > > es
> > > > > > una tontería pero ;-)
> > > > > > gracias de antemano.
> > > > > > Roberto G.A.
> > > > > >
> > > > > > ********************************************************
> > > > > > using System;
> > > > > > using System.Xml;
> > > > > >
> > > > > > namespace Izpano.XmlDocuments
> > > > > > {
> > > > > > public class XmlNodes : System.Xml.XmlNode
> > > > > > {
> > > > > > public override string LocalName
> > > > > > {
> > > > > > get
> > > > > > {
> > > > > > return null;
> > > > > > }
> > > > > > }
> > > > > >
> > > > > > public override string Name
> > > > > > {
> > > > > > get
> > > > > > {
> > > > > > return null;
> > > > > > }
> > > > > > }
> > > > > >
> > > > > > public override XmlNode CloneNode(bool deep)
> > > > > > {
> > > > > > return null;
> > > > > > }
> > > > > >
> > > > > > public override XmlNodeType NodeType
> > > > > > {
> > > > > > get
> > > > > > {
> > > > > > return new XmlNodeType ();
> > > > > > }
> > > > > > }
> > > > > >
> > > > > > public override void WriteContentTo(XmlWriter w)
> > > > > > {
> > > > > >
> > > > > > }
> > > > > >
> > > > > > public override void WriteTo(XmlWriter w)
> > > > > > {
> > > > > >
> > > > > > }
> > > > > >
> > > > > > }
> > > > > > }
> > > > > > ************************************************
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>



Respuesta Responder a este mensaje
#10 Roberto G.A.
27/05/2004 - 22:42 | Informe spam
Genial Muchisimas gracias Diego, había visto algo parecido, pero
los ejemplos que me envías son concluyentes :)

Gracias otra vez por tu interes,
Saludos, Roberto G.A.



"Diego Gonzalez" wrote in message
news:
Me parece que esto es lo que estás buscando:

using System;
using System.IO;
using System.Xml;

class PersonDocument : XmlDocument
{
public override XmlElement CreateElement(string prefix, string lname,
string nsuri)
{
if (lname=="Person" && nsuri=="urn:sample-code:v1")
return new Person(prefix, lname, nsuri, this);
else
{
Console.WriteLine("Creating element " + prefix + "(" + nsuri + "):"


+
lname);
return base.CreateElement(prefix, lname, nsuri);
}
}
}

class Person : XmlElement
{
internal Person(string prefix, string lname, string nsuri, XmlDocument
doc)
: base(prefix, lname, nsuri, doc)
{
// NOP
}

public string FirstName
{
get { return this["firstName"].InnerText; }
}
public string LastName
{
get { return this["lastName"].InnerText; }
}
public int Age
{
get { return Int32.Parse(this["age"].InnerText); }
}

public override string ToString()
{
return FirstName + " " + LastName + " (" + Age + " years old)";
}
}



class Class1
{
static void Main(string[] args)
{
PersonDocument pdoc = new PersonDocument();
TextReader tr = new StreamReader("data.xml");
pdoc.Load(tr);




//pdoc.LoadXml("<person><firstName>Fred</firstName><lastName>Wesley</lastNam
e><age>30</age></person>");




//pdoc.LoadXml("<person><firstName>Fred</firstName><lastName>Wesley</lastNam
e></person>");

Person p = (Person)pdoc.DocumentElement;
Console.WriteLine("{0} {1} ({2} years old)", p.FirstName, p.LastName,
p.Age);
}
}

Si el atttach no sale, envíame un email.

Saludos,
Diego Gonzalez
Lagash Systems SA

"Roberto G.A." wrote in message
news:
> Bueno, más que extenderla, más bien quería personalizarla..
> Supongamos que accedo a un nodo de un xml que tiene un formato
establecido,
> supongamos:
>
> nodo: <contacto id='1' nombre='Luperio' estado='0'>
>
> al consumir dicho nodo con una clase que heredara de XmlNode lo que


quería
> hacer es facilitar el acceso a sus
> atributos, dándoles tipado a los mismos, algo como esto:
>
> XmlNodoContacto contacto = new XmlNodoContacto(nodo); //Constructor con
el
> nodo en cuestión
>
> //El atributo es un entero, se convierte el atributo del nodo al tipo
> indicado y así respectivamente
> Console.WriteLine(contacto.atributo_id.ToString());
> Console.WriteLine(contacto.atributo_nombre);
> Console.WriteLine(contacto.atributo_estado.ToString());
>
> Esto es solo un ejemplo, también serviría para encapsular determinadas
> operaciones con datos de un nodo para facilitar la programación,
> por ejemplo una serie de nodos que guardaran un atributo importe y
quisiera
> un atributo generico de la clase que calculara el total de las


mismas
y
> muchas cosas más.
>
> Vamos en definitiva, una serie de nodos definidos que facilitaran el
acceso
> y la gestión de documentos xml con una estructura definida.
> Lo que ahora haré, es dividirlo en pequeños documentos xml XmlDocument.
>
> No sé si me he explicado bien, o es una locura pero bueno, quería
> hacerlo.
>
> Gracias por todo Diego.
> Roberto G.A.
>
> "Diego Gonzalez" wrote in message
> news:
> > Para que necesitas extender XmlNode?
> >
> > DiegoG
> >
> > "Roberto G.A." wrote in message
> > news:
> > > Pues vaya :( de todas formas muchas gracias Diego por la


solución.
> > >
> > >
> > > Saludos,
> > > Roberto G.A.
> > >
> > >
> > > "Diego Gonzalez" wrote in message
> > > news:
> > > > No se puede extender XmlNode porque no tiene un constrcutor


"public"
o
> > > > "protected", es decir que la clase derivada no puede construir la
> clase
> > > base
> > > > y eso es similar a que la clase sea "sealed" cuando se quiere
extender
> > > desde
> > > > otro assembly.
> > > >
> > > > Si bien XmlNode es abstract, es decir, está hecha para ser


derivada,
> no
> > > está
> > > > pensada para ser derivada por cualquier aplicación.
> > > >
> > > > Suerte,
> > > > Diego Gonzalez
> > > > Lagash Systems SA
> > > >
> > > > "Roberto G.A." wrote in message
> > > > news:
> > > > > El error que me da es.
> > > > > "error CS0122: 'System.Xml.XmlNode.XmlNode()' is inaccessible


due
to
> > its
> > > > > protection level"
> > > > >
> > > > > Se me había olvidado indicarlo, gracias Octavio.
> > > > > Roberto G.A.
> > > > >
> > > > >
> > > > > "Octavio Hernandez" wrote in message
> > > > > news:#
> > > > > >
> > > > > > ¿Cuál es el mensaje de error que recibes?
> > > > > >
> > > > > > Slds - Octavio
> > > > > >
> > > > > > "Roberto G.A." escribió en el
mensaje
> > > > > > news:ui%
> > > > > > > Una preguntilla, si quisiera crear una clase que heredara de
> > XmlNode
> > > > > para
> > > > > > > añadirle cierta funcionalidad que me interesa, ¿como podría
> hacer
> > > > esto?
> > > > > > >
> > > > > > > Hago esto pero me genera un error que no se como


arreglar.
> > > seguro
> > > > > que
> > > > > > es
> > > > > > > una tontería pero ;-)
> > > > > > > gracias de antemano.
> > > > > > > Roberto G.A.
> > > > > > >
> > > > > > > ********************************************************
> > > > > > > using System;
> > > > > > > using System.Xml;
> > > > > > >
> > > > > > > namespace Izpano.XmlDocuments
> > > > > > > {
> > > > > > > public class XmlNodes : System.Xml.XmlNode
> > > > > > > {
> > > > > > > public override string LocalName
> > > > > > > {
> > > > > > > get
> > > > > > > {
> > > > > > > return null;
> > > > > > > }
> > > > > > > }
> > > > > > >
> > > > > > > public override string Name
> > > > > > > {
> > > > > > > get
> > > > > > > {
> > > > > > > return null;
> > > > > > > }
> > > > > > > }
> > > > > > >
> > > > > > > public override XmlNode CloneNode(bool deep)
> > > > > > > {
> > > > > > > return null;
> > > > > > > }
> > > > > > >
> > > > > > > public override XmlNodeType NodeType
> > > > > > > {
> > > > > > > get
> > > > > > > {
> > > > > > > return new XmlNodeType ();
> > > > > > > }
> > > > > > > }
> > > > > > >
> > > > > > > public override void WriteContentTo(XmlWriter w)
> > > > > > > {
> > > > > > >
> > > > > > > }
> > > > > > >
> > > > > > > public override void WriteTo(XmlWriter w)
> > > > > > > {
> > > > > > >
> > > > > > > }
> > > > > > >
> > > > > > > }
> > > > > > > }
> > > > > > > ************************************************
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>
>



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