Foros del Web » Programación para mayores de 30 ;) » .NET »

Generación de código XML desde C#

Estas en el tema de Generación de código XML desde C# en el foro de .NET en Foros del Web. Hola!!! Resulta que estoy haciendo una aplicación en C# (Windows Forms) que tiene que generar varios archivos con código XML. Por ejemplo, uno de los ...
  #1 (permalink)  
Antiguo 15/12/2007, 19:56
Avatar de kalixe985  
Fecha de Ingreso: junio-2006
Ubicación: Colombiano viviendo en Es
Mensajes: 73
Antigüedad: 17 años, 10 meses
Puntos: 0
Pregunta Generación de código XML desde C#

Hola!!!
Resulta que estoy haciendo una aplicación en C# (Windows Forms) que tiene que generar varios archivos con código XML. Por ejemplo, uno de los archivos generados podría tener la misma estructura que el siguiente:

Código:
<?xml version="1.0" encoding="utf-8"?>
<Application xmlns="http://www.dvdforum.org/2005/HDDVDVideo/Manifest">
    <Region x="0" y="0" width="1920" height="1080" />
    <script src="file:///dvddisc/ADV_OBJ/main.js" />
    <Markup src="file:///dvddisc/ADV_OBJ/main.xmu" />
    <Resource src="file:///dvddisc/ADV_OBJ/main.js" />
    <Resource src="file:///dvddisc/ADV_OBJ/main.xmu" />
    <Resource src="file:///dvddisc/ADV_OBJ/chapter1____e.png" />
    <Resource src="file:///dvddisc/ADV_OBJ/chapter1_f__e.png" />
    <Resource src="file:///dvddisc/ADV_OBJ/chapter1of__e.png" />
    <Resource src="file:///dvddisc/ADV_OBJ/chapter2____e.png" />
    <Resource src="file:///dvddisc/ADV_OBJ/chapter2_f__e.png" />
    <Resource src="file:///dvddisc/ADV_OBJ/chapter2of__e.png" />
    <Resource src="file:///dvddisc/ADV_OBJ/chapter3____e.png" />
    <Resource src="file:///dvddisc/ADV_OBJ/chapter3_f__e.png" />
    <Resource src="file:///dvddisc/ADV_OBJ/chapter3of__e.png" />
</Application>
A medida que avanzo, poco a poco voy conociendo las clases XML de C# y familiarizándome con ellas.
Mi aplicación tiene que funcionar como proyectos, de tal forma que el usuario pueda guardar el código que ha generado y la siguiente vez que abra la aplicación, se cargue el último código XML que el usuario creó, para poder seguir modificándolo, añadiéndole o quitándole elementos.
En lo que se refiere a generar la líneas de código XML en un fichero, lo sé hacer, con la clase XmlTextWriter. Lo que necesito es saber si hay alguna forma de ir generando el código, por ejemplo en un stream, y cuando el usuario Guarde los cambios, entonces ese código generado se escriba persistentemente en un archivo XML. Con esto lo que quiero conseguir es que sólo se escriba el código generado en el archivo XML cuando el usuario guarde, y no antes. Creo que esta forma es mejor, ya que si fuera leyendo y escribiendo el archivo XML, a medida que se fuera modificando, sería menos eficiente (lecturas y escrituras continuas de un mismo fichero XML) y menos práctico. ¿Qué opináis? ¿Se podría hacer de otra manera? Acepto consejos. También he pensado utilizar archivos temporales XML. ¿Me lo recomendáis? ¿Cómo me aconsejaríais que hiciera lo que quiero conseguir?

Por otra parte, ¿Hay algún método y/o clase que permita buscar elementos en un archivo XML, modificarlos, borrarlos o crear nuevos, indistintamente de la línea en que se encuentren? Me explico, por ejemplo, en el ejemplo de código que he puesto, me interesaría poder borrar un elemento Resource, según su atributo src, por ejemplo, o modificar este elemento Resource o crear uno nuevo, etc...; me interesaría, por ejemplo, modificar, eliminar o volver a crear un elemento Region también...
Querría hacer lo anterior con todos los demás elementos (Region, Script, Markup, etc...): poderlos crear nuevos, borrarlos o modificarlos. ¿Cómo podría hacer esto?

Perdón por todas la dudas que planteo y por mi ignorancia. De antemano agradezco cualquier enlace a tutoriales, etc de XML con C#.

A ver si alguien me puede ayudar, gracias y salu2!!!!!
  #2 (permalink)  
Antiguo 17/12/2007, 09:05
Avatar de .seb  
Fecha de Ingreso: marzo-2006
Ubicación: Uruguay
Mensajes: 493
Antigüedad: 18 años, 1 mes
Puntos: 1
Re: Generación de código XML desde C#

Te conviene utilizar la clase XmlDocument
__________________
saludos
seba
http://sgomez.blogspot.com
  #3 (permalink)  
Antiguo 17/12/2007, 16:19
Avatar de kalixe985  
Fecha de Ingreso: junio-2006
Ubicación: Colombiano viviendo en Es
Mensajes: 73
Antigüedad: 17 años, 10 meses
Puntos: 0
Pregunta Re: Generación de código XML desde C#

Cita:
Iniciado por .seb Ver Mensaje
Te conviene utilizar la clase XmlDocument
HOla!!!
Exacto, creo que optaré por XmlDocument y XpathNavigator.
Otra cosa, resulta que el código XML que debo generar debe cumplir un schema existente. En este punto necesitaria dos cosas:
  • Que se compruebe si el codigo que voy generando cumple ese schema existente. ¿Cómo podría comprobarlo?
  • Que los elementos que inserte sean de la forma <Elemento atributo1="valor" atributo2="valor" /> y no de la forma <Elemento atributo1="valor" atributo2="valor"></Elemento> ¿Hay alguna función que inserte un elemento con la anterior forma o algún método que me permita crear un elemento a partir de un string, en el que habría una cadena con un elemento con la forma descrita anteriormente?
  • Si tengo un XmlNode, me interesaría poder modificar los valores de sus atributos e insertar nuevos atributos. Por ejemplo, si tengo el nodo <Elemento atributo="valor" atributo2="valor2" />, me interesaría poder obtener <Elemento atributo="NuevoValor" atributo2="NuevoValor2" atributoNuevo="nuevo" /> .
A ver si me puedes ayudar.
Gracias y salu2!!!!

Última edición por kalixe985; 17/12/2007 a las 18:52
  #4 (permalink)  
Antiguo 02/01/2008, 16:55
 
Fecha de Ingreso: octubre-2005
Mensajes: 3
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Generación de código XML desde C#

<ShareMaximo>
<strshare> 100% - 01 /Dic 02 La Aca</strshare>
</ShareMaximo>

intenta con este procedimiento, solo que aqui es un pequeño nodo el que se edita
{
SetMaximoSare();
string ruta = AppDomain.CurrentDomain.BaseDirectory.ToString();
XmlDocument doc = new XmlDocument();

doc.Load(ruta + "FusionCharts\\XMLFile.xml");

XmlNodeList ShareMaximo = doc.GetElementsByTagName("ShareMaximo");

XmlNodeList lista = ((XmlElement)ShareMaximo[0]).GetElementsByTagName("strshare");

foreach (XmlElement elem in lista)
{
elem.InnerText = _maximoShare;
}
doc.Save(ruta + "FusionCharts\\XMLFile.xml");

}
catch (Exception XMLe)
{
throw XMLe;
}


varible _maximoShare es global para la clase es un string

Última edición por Jorge Mauricio; 02/01/2008 a las 16:57 Razón: nota
  #5 (permalink)  
Antiguo 05/01/2008, 19:09
Avatar de kalixe985  
Fecha de Ingreso: junio-2006
Ubicación: Colombiano viviendo en Es
Mensajes: 73
Antigüedad: 17 años, 10 meses
Puntos: 0
Pregunta Re: Generación de código XML desde C#

Hola de nuevo!!!

Tengo un problema a la hora de eliminar un nodo xml. Resulta que el nodo tiene la siguiente estructura:

<cue use="ButtonHover" begin="class('chapterButton')[state:pointer()=true()]" dur="1f" />

y me gustaría poder eliminarlo según su atributo begin, ya que hay muchos nodos de este tipo y yo sólo quiero eliminar uno en concreto, cada vez que quiera. El problema está en que el contenido del atributo tiene comillas simples ( ' ), lo cual me interfiere a la hora de seleccionar el nodo con una expresión xpath, para luego poder eliminarlo.

He probado con:

Código:
XmlNode deleteContact = contacto.SelectSingleNode("//_namespace:cue[@begin='class('chapterButton')[state:pointer()=true()]", nsmanager);

deleteContact.ParentNode.RemoveChild(deleteContact);

Pero no me funciona por culpa de las comillas ( ' ). ¿Cómo puedo escoger el nodo entonces, o hay alguna forma de escogerlo con xpath y que no falle por las comillas simples ( ' )?



Gracias de antemano y salu2!!!

Última edición por kalixe985; 05/01/2008 a las 19:15
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:36.