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 +}