Pregunta

He estado haciendo un montón de procesamiento XML en C # en los últimos tiempos y después de volver a C # desde una codificación de JavaScript de larga duración realmente me faltan algunos de los buenos atajos de JS.

He elegido un documento XML de gran tamaño compuesto por elementos, elementos secundarios, etc. Representando boletos de alojamiento / vuelos / atracciones para una reserva en línea.

Hasta ahora acabo de pasar Xpathing por el documento para extraer la información que necesito. Ahora he comenzado a moverlos a funciones auxiliares. Entonces, por ejemplo, podríamos querer cambiar la forma en que procesamos una reserva si tiene un vuelo de un tercero. Eso es fácil de verificar con Xpath, solo verificamos el valor de un elemento. Entonces, tengo una función auxiliar que hace exactamente eso para que mi Xpath esté solo en un lugar y devuelva un valor bool. Solo tengo alrededor de una docena de estos y hasta ahora he estado tratando todo como una reserva, pero acabamos de hacer un trabajo que trató sobre el elemento de vuelo de la reserva y los últimos 4 ayudantes. que acabo de crear están muy relacionadas con el vuelo, lo que me hizo pensar si lo estoy haciendo bien.

He evitado la necesidad de convertir todo el documento en un Objeto, ya que sería muy muy doloroso debido a su tamaño y actualmente no es necesario, todavía no lo es. Crear todos esos objetos sería un gran dolor y he trabajado en proyectos similares en los que se ha realizado esta ruta y me duele tratar de depurarla o comenzar a entenderla. No estamos usando todos los documentos, el procesamiento que estamos haciendo apenas usa el 10%, por lo que la deserialización de todo parecía un poco sobredimensionada. Deserializarlo en JS sería muy fácil, pero C # lo hace tan largo y sin aliento. Sé que podría usar XSD.exe para eliminar parte del dolor, pero creo que es un desastre usarlo sin un buen esquema (que por supuesto no existe).

Pero me hizo pensar, ¿deberíamos SIEMPRE crear una gran colección de objetos a partir de nuestro XML o la forma rápida en que lo he hecho todavía es aceptable? Estoy contento con eso, pero solo trato de pensarlo si los Objetos serían una mejor manera. Si lo convertimos todo, al menos estaría disponible en caso de que lo necesitemos en futuros proyectos.

Soy consciente de que puede haber algunos comentarios sobre la velocidad de xpathing todo, pero es lo suficientemente rápido para lo que queremos actualmente, por lo que no es un problema aquí.

¿Alguna idea sobre si estoy bien para continuar XPathing?

¿Fue útil?

Solución

Si tiene un esquema XML (XSD), probablemente preferiría siempre el enfoque de deserialización al de objeto: es más fácil y limpio trabajar con buenos objetos CLR.

Si no tiene un esquema XML y no puede obtener uno del origen / proveedor de sus datos, entonces la decisión no está clara. Como usted dice, XSD.EXE puede aliviar un poco el dolor de la ecuación, pero un esquema XML inferido generalmente no es perfecto ni muy bonito.

Difícil: si te sientes cómodo con el uso de XPath para navegar tu XML, me quedaré con él. Si tiene XML que necesita analizar muy a menudo, tal vez crear una XSD podría ser una buena idea al final.

Otros consejos

Sí, si necesita solo el 10% del XML, XPathing parece estar bien aquí debido a una posible exageración de deserialización.

En C # 4.0 y DLR hay una palabra clave dinámica que permite explorar dinámicamente la estructura XML.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top