Posted to tcl by de at Wed Apr 26 19:07:32 GMT 2017view pretty
# This doesn't run. It's just an illustrating example package require tdom # Define the elements of your XML vocabulary as nodeCmds foreach element { CLASSIFICATION_SYSTEM CLASSIFICATION_SYSTEM_NAME CLASSIFICATION_SYSTEM_FULLNAME CLASSIFICATION_SYSTEM_VERSION CLASSIFICATION_SYSTEM_DESCR CLASSIFICATION_SYSTEM_LEVELS ... } { dom createNodeCmd elementNode $element } # A nodeCmd to generate text nodes dom createNodeCmd textNode t # Here an example to build an XML tree from (nested) sqlite db # queries: set synonymQuery { SELECT pcSchlagworte.Schlagwortbezeichnung FROM pcKlassenSchlagworte_rel, pcSchlagworte WHERE Klasse_ID = $Klassen_ID AND pcSchlagworte.Schlagwort_ID = pcKlassenSchlagworte_rel.Schlagwort_ID } set featureQuery { SELECT pcMerkmale.Merkmal_ID, pcMerkmale.Datentyp, Einheit_ID, Sortiert_Nr, Mussmerkmal, KlasseMerkmal_Nr FROM pcKlassenMerkmale_rel, pcMerkmale WHERE Klasse_ID = $Klassen_ID AND pcMerkmale.Merkmal_ID = pcKlassenMerkmale_rel.Merkmal_ID } set valueQuery { SELECT Wert_ID FROM pcKlassenMerkmaleWerte_rel WHERE KlasseMerkmal_Nr = $KlasseMerkmal_Nr } db eval {SELECT * FROM pcKlassen} {} { $classification_groups appendFromScript { CLASSIFICATION_GROUP level $Hierarchieebene { CLASSIFICATION_GROUP_ID {t $Klassen_ID} CLASSIFICATION_GROUP_NAME {t $Klassenbezeichnung} set synonyms [db eval $synonymQuery] if {[llength $synonyms] > 0} { CLASSIFICATION_GROUP_SYNONYMS { foreach synonym $synonyms { SYNONYM {t $synonym} } } } set features [db eval $featureQuery] if {[llength $features] > 0} { CLASSIFICATION_GROUP_FEATURE_TEMPLATES { foreach {Merkmal_ID Datentyp Einheit_ID Sortier_NR Mussmerkmal KlasseMerkmal_Nr} $features { CLASSIFICATION_GROUP_FEATURE_TEMPLATE { FT_IDREF {t $Merkmal_ID} switch $Mussmerkmal { "TRUE" { FT_MANDATORY {t "true"} } "FALSE" { FT_MANDATORY {t "false"} } default { puts stderr "FEATURE mit unbekanntem Mussmerkmal \ '$Mussmerkmal'" FT_MANDATORY {} } } set valueIDs [db eval $valueQuery] FT_DATATYPE { switch $Datentyp { "numerisch" { t "N" } "alphanumerisch" { if {[llength $valueIDs] > 0} { t "A" } else { t "X" } } "logisch" { t "L" } default { puts stderr "Unbekannter FT_DATATYPE '$Datentyp'" t $Datentyp } } } if {$Einheit_ID ne ""} { FT_UNIT { t $Einheit_ID } } FT_ORDER {t $Sortier_NR} if {[llength $valueIDs] > 0} { FT_ALLOWED_VALUES { foreach valueID $valueIDs { ALLOWED_VALUE_IDREF {t $valueID} } } } } } } } if {$Hierarchieebene > 1} { CLASSIFICATION_GROUP_PARENT_ID {t $Parent_ID} } } } }