Hierarchische XSL-Parameter-Sammlung implementiert
XML-Transformationen berücksichtigen jetzt alle XSLT-Parameter der übergeordneten TreeNodes, nicht nur die des direkten XslFile-Knotens. Tiefere Ebenen überschreiben höhere Ebenen (XslFile hat höchste Priorität). Änderungen: - _collect_parent_params(): Bug-Fix für korrekte Prioritätsreihenfolge - _create_transformation_job(): Hierarchische Parameter-Sammlung mit TreeWidgetItem-Kontext - _transform_xml_file() und _transform_xsl_file(): Weitergabe des TreeWidgetItem-Kontexts - Verbessertes Logging mit logger statt print() 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
+47
-23
@@ -2169,39 +2169,43 @@ class MainWindow(QMainWindow):
|
|||||||
|
|
||||||
def _collect_parent_params(self, item):
|
def _collect_parent_params(self, item):
|
||||||
"""
|
"""
|
||||||
Sammelt die XSLT-Parameter aller Eltern-Nodes.
|
Sammelt die XSLT-Parameter aller Eltern-Nodes von der Wurzel bis zum angegebenen Item.
|
||||||
|
|
||||||
|
Parameter werden von oben nach unten gesammelt, wobei tiefere Ebenen höhere Priorität haben.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
item: Das TreeWidgetItem
|
item: Das TreeWidgetItem (kann TreeNode oder XslFile sein)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
dict: Dictionary mit allen Eltern-Parametern
|
dict: Dictionary mit allen gesammelten Parametern (tiefere Ebenen überschreiben höhere)
|
||||||
"""
|
"""
|
||||||
parent_params = {}
|
parent_params = {}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Gehe die Hierarchie nach oben durch
|
# Sammle alle Eltern-Items in einer Liste (von unten nach oben)
|
||||||
|
parents = []
|
||||||
current_item = item.parent()
|
current_item = item.parent()
|
||||||
|
|
||||||
while current_item:
|
while current_item:
|
||||||
# Hole das Node-Objekt
|
parents.append(current_item)
|
||||||
parent_node = current_item.data(0, Qt.ItemDataRole.UserRole)
|
|
||||||
|
|
||||||
if parent_node and hasattr(parent_node, "xslt_params") and parent_node.xslt_params:
|
|
||||||
# Füge die Parameter des Eltern-Nodes hinzu
|
|
||||||
# Eltern-Parameter haben niedrigere Priorität (werden überschrieben)
|
|
||||||
for key, value in parent_node.xslt_params.items():
|
|
||||||
if key not in parent_params: # Nur hinzufügen wenn noch nicht vorhanden
|
|
||||||
parent_params[key] = value
|
|
||||||
|
|
||||||
# Gehe zum nächsten Eltern-Element
|
|
||||||
current_item = current_item.parent()
|
current_item = current_item.parent()
|
||||||
|
|
||||||
print(f"Gesammelte Eltern-Parameter: {parent_params}")
|
# Kehre Liste um, sodass wir von Wurzel zu Kind iterieren
|
||||||
|
parents.reverse()
|
||||||
|
|
||||||
|
# Sammle Parameter von Wurzel zu Kind (Kind überschreibt Eltern)
|
||||||
|
for parent_item in parents:
|
||||||
|
parent_node = parent_item.data(0, Qt.ItemDataRole.UserRole)
|
||||||
|
|
||||||
|
if parent_node and hasattr(parent_node, "xslt_params") and parent_node.xslt_params:
|
||||||
|
# Update überschreibt vorherige Werte (höhere Priorität für tiefere Ebenen)
|
||||||
|
parent_params.update(parent_node.xslt_params)
|
||||||
|
|
||||||
|
logger.debug(f"Gesammelte Eltern-Parameter: {parent_params}")
|
||||||
return parent_params
|
return parent_params
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Fehler beim Sammeln der Eltern-Parameter: {e}")
|
logger.error(f"Fehler beim Sammeln der Eltern-Parameter: {e}")
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
def _save_project_settings(self):
|
def _save_project_settings(self):
|
||||||
@@ -3008,8 +3012,8 @@ class MainWindow(QMainWindow):
|
|||||||
QMessageBox.warning(self, "Fehler", "Konnte XML-Datei nicht ermitteln")
|
QMessageBox.warning(self, "Fehler", "Konnte XML-Datei nicht ermitteln")
|
||||||
return
|
return
|
||||||
|
|
||||||
# Erstelle TransformationJob
|
# Erstelle TransformationJob mit TreeWidgetItem-Kontext für Parameter-Sammlung
|
||||||
job = self._create_transformation_job(xsl_file_obj, xml_file_obj)
|
job = self._create_transformation_job(xsl_file_obj, xml_file_obj, parent_item)
|
||||||
if not job:
|
if not job:
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -3044,7 +3048,8 @@ class MainWindow(QMainWindow):
|
|||||||
# Erstelle TransformationJobs für alle XML-Dateien
|
# Erstelle TransformationJobs für alle XML-Dateien
|
||||||
jobs = []
|
jobs = []
|
||||||
for xml_file_obj in xsl_file_obj.xmls:
|
for xml_file_obj in xsl_file_obj.xmls:
|
||||||
job = self._create_transformation_job(xsl_file_obj, xml_file_obj)
|
# Übergebe das XslFile-TreeWidgetItem für Parameter-Sammlung
|
||||||
|
job = self._create_transformation_job(xsl_file_obj, xml_file_obj, item)
|
||||||
if job:
|
if job:
|
||||||
jobs.append(job)
|
jobs.append(job)
|
||||||
|
|
||||||
@@ -3059,13 +3064,16 @@ class MainWindow(QMainWindow):
|
|||||||
logger.error(f"Fehler beim Transformieren der XSL-Datei: {e}")
|
logger.error(f"Fehler beim Transformieren der XSL-Datei: {e}")
|
||||||
QMessageBox.critical(self, "Fehler", f"Fehler beim Transformieren: {str(e)}")
|
QMessageBox.critical(self, "Fehler", f"Fehler beim Transformieren: {str(e)}")
|
||||||
|
|
||||||
def _create_transformation_job(self, xsl_file_obj: XslFile, xml_file_obj: XmlFile) -> TransformationJob | None:
|
def _create_transformation_job(
|
||||||
|
self, xsl_file_obj: XslFile, xml_file_obj: XmlFile, xsl_file_item: QTreeWidgetItem | None = None
|
||||||
|
) -> TransformationJob | None:
|
||||||
"""
|
"""
|
||||||
Erstellt einen TransformationJob für eine XML/XSL-Kombination.
|
Erstellt einen TransformationJob für eine XML/XSL-Kombination.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
xsl_file_obj: Das XslFile-Objekt
|
xsl_file_obj: Das XslFile-Objekt
|
||||||
xml_file_obj: Das XmlFile-Objekt
|
xml_file_obj: Das XmlFile-Objekt
|
||||||
|
xsl_file_item: Optional das TreeWidgetItem des XslFile für hierarchische Parameter-Sammlung
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
TransformationJob oder None bei Fehler
|
TransformationJob oder None bei Fehler
|
||||||
@@ -3125,11 +3133,27 @@ class MainWindow(QMainWindow):
|
|||||||
# Erstelle absoluten Pfad zur XSL-Datei
|
# Erstelle absoluten Pfad zur XSL-Datei
|
||||||
xsl_file_abs = xsl_dir.path_to_root_dir / xsl_file_obj.xsl_file
|
xsl_file_abs = xsl_dir.path_to_root_dir / xsl_file_obj.xsl_file
|
||||||
|
|
||||||
# Sammle XSLT-Parameter (kombiniere TreeNode + XslFile Parameter)
|
# Sammle XSLT-Parameter hierarchisch (TreeNode-Eltern → XslFile)
|
||||||
xslt_params = {}
|
xslt_params = {}
|
||||||
# TODO: Hier könnten TreeNode-Parameter von übergeordneten Knoten gesammelt werden
|
|
||||||
|
# 1. Sammle Parameter von übergeordneten TreeNodes (falls TreeWidgetItem verfügbar)
|
||||||
|
if xsl_file_item is not None:
|
||||||
|
parent_params = self._collect_parent_params(xsl_file_item)
|
||||||
|
xslt_params.update(parent_params)
|
||||||
|
logger.debug(f"Hierarchische Parameter gesammelt: {parent_params}")
|
||||||
|
else:
|
||||||
|
logger.warning(
|
||||||
|
"Kein TreeWidgetItem-Kontext verfügbar - "
|
||||||
|
"übergeordnete TreeNode-Parameter werden nicht berücksichtigt"
|
||||||
|
)
|
||||||
|
|
||||||
|
# 2. Überschreibe mit XslFile-eigenen Parametern (höchste Priorität)
|
||||||
xslt_params.update(xsl_file_obj.xslt_params)
|
xslt_params.update(xsl_file_obj.xslt_params)
|
||||||
|
|
||||||
|
logger.info(
|
||||||
|
f"Finale XSLT-Parameter für {xml_file_obj.xml} mit {xsl_file_obj.bez}: {xslt_params}"
|
||||||
|
)
|
||||||
|
|
||||||
# Erstelle TransformationJob
|
# Erstelle TransformationJob
|
||||||
job = TransformationJob(
|
job = TransformationJob(
|
||||||
project_dir=self.project.project_dir,
|
project_dir=self.project.project_dir,
|
||||||
|
|||||||
Reference in New Issue
Block a user