From e1195a5f2efab2c0e79683ac021dc168ca85cf13 Mon Sep 17 00:00:00 2001 From: hejl Date: Wed, 21 May 2025 08:38:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=98=BE=E7=A4=BA=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E4=B8=BA=E5=85=A8=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template_parser_controller.dart | 89 ++++++++++--------- 1 file changed, 48 insertions(+), 41 deletions(-) diff --git a/win_text_editor/lib/modules/template_parser/controllers/template_parser_controller.dart b/win_text_editor/lib/modules/template_parser/controllers/template_parser_controller.dart index f1ed6c0..5a0ab0d 100644 --- a/win_text_editor/lib/modules/template_parser/controllers/template_parser_controller.dart +++ b/win_text_editor/lib/modules/template_parser/controllers/template_parser_controller.dart @@ -61,6 +61,7 @@ class TemplateParserController extends BaseContentController { traverse(child); } } + for (var node in _treeNodes) { traverse(node); } @@ -92,50 +93,56 @@ class TemplateParserController extends BaseContentController { Logger().debug('开始解析XML,根元素: ${document.rootElement.name}'); _treeNodes = _buildTreeNodes(document.rootElement, document.rootElement.localName, depth: 0); - // 新增:解析所有节点值到 templateItems - _templateItems = _parseAllNodeValues(document); + // 新增:解析所有节点值到 templateItems + _templateItems = _parseAllNodeValues(document); notifyListeners(); } List _parseAllNodeValues(xml.XmlDocument document) { - final items = []; - int id = 0; - - // 递归遍历所有元素 - void traverse(xml.XmlElement element, String currentPath) { - // 1. 添加当前元素的所有属性值 - for (final attr in element.attributes) { - items.add(TemplateItem( - id: id++, - content: attr.value, - xPath: '$currentPath/@${attr.name.local}', - value: attr.value, - nodeType: NodeType.attribute, - )); - } - - // 2. 添加当前元素的文本内容(如果有) - final textNodes = element.children.whereType().where((t) => t.text.trim().isNotEmpty); - if (textNodes.isNotEmpty) { - items.add(TemplateItem( - id: id++, - content: textNodes.first.text, - xPath: currentPath, - value: textNodes.first.text, - nodeType: NodeType.text, - )); - } - - // 3. 递归处理子元素 - for (final child in element.childElements) { - traverse(child, '$currentPath/${child.name.local}'); + final items = []; + int id = 0; + + // 递归遍历所有元素 + void traverse(xml.XmlElement element, String currentPath) { + // 1. 添加当前元素的所有属性值 + for (final attr in element.attributes) { + items.add( + TemplateItem( + id: id++, + content: attr.value, + xPath: '$currentPath/@${attr.name.local}', + value: attr.value, + nodeType: NodeType.attribute, + ), + ); + } + + // 2. 添加当前元素的文本内容(如果有) + final textNodes = element.children.whereType().where( + (t) => t.text.trim().isNotEmpty, + ); + if (textNodes.isNotEmpty) { + items.add( + TemplateItem( + id: id++, + content: textNodes.first.text, + xPath: currentPath, + value: textNodes.first.text, + nodeType: NodeType.text, + ), + ); + } + + // 3. 递归处理子元素 + for (final child in element.childElements) { + traverse(child, '$currentPath/${child.name.local}'); + } } + + traverse(document.rootElement, document.rootElement.localName); + return items; } - - traverse(document.rootElement, document.rootElement.localName); - return items; -} List _buildTreeNodes( xml.XmlElement element, @@ -145,7 +152,7 @@ class TemplateParserController extends BaseContentController { }) { final node = TemplateNode( path: path, - name: element.name.local, + name: element.qualifiedName, children: [], depth: depth, isExpanded: depth < 5, // 默认展开前两层 @@ -159,7 +166,7 @@ class TemplateParserController extends BaseContentController { element.attributes.map( (attr) => TemplateNode( path: '$path/@${attr.name.local}', - name: '@${attr.name.local}', + name: '@${attr.qualifiedName}', children: [], depth: depth + 1, isAttribute: true, @@ -218,7 +225,7 @@ class TemplateParserController extends BaseContentController { void traverse(TemplateNode node) { if (node.isChecked) { selectedNodes.add(node); -} + } for (var child in node.children) { traverse(child); } @@ -230,4 +237,4 @@ class TemplateParserController extends BaseContentController { return selectedNodes; } -} \ No newline at end of file +}