import 'dart:io'; import 'package:xml/xml.dart'; void main2() { const dictFilePath = "D:/PBHK/pbhk_trade/Sources/ServerUFT/UFT/metadata/dict.dict"; const fieldFilePath = "D:/PBHK/pbhk_trade/Sources/ServerUFT/UFT/metadata/stdfield.stdfield"; final dictFile = File(dictFilePath); final fieldFile = File(fieldFilePath); if (!dictFile.existsSync()) { print('字典文件不存在: $dictFilePath'); return; } if (!fieldFile.existsSync()) { print('字段文件不存在: $fieldFilePath'); return; } try { // 1. 读取字典文件 final dictDocument = XmlDocument.parse(dictFile.readAsStringSync()); // 2. 读取字段文件 final fieldDocument = XmlDocument.parse(fieldFile.readAsStringSync()); // 3. 找出字典文件中所有 xsi:type="metadata:DictionaryType" 的items节点 final dictionaryItems = dictDocument.findAllElements('items').where((element) { return element.getAttribute('xsi:type') == 'metadata:DictionaryType'; }).toList(); // 4. 处理这些节点 for (final item in dictionaryItems) { bool hasConstantName = false; String? dictionaryName; // 检查所有子节点 for (final child in item.childElements) { final constantName = child.getAttribute('constantName'); if (constantName != null && constantName.isNotEmpty) { hasConstantName = true; break; } } // 如果没有子节点包含constantName属性 if (!hasConstantName) { dictionaryName = item.getAttribute('name'); if (dictionaryName != null && dictionaryName.isNotEmpty) { // 在字段文件中查找是否有items节点的dictionaryType等于该name值 final matchingFieldItems = fieldDocument.findAllElements('items').where((element) { return element.getAttribute('dictionaryType') == dictionaryName; }); // 如果没有找到匹配的字段,则删除字典中的当前节点 if (matchingFieldItems.isEmpty) { item.parent?.children.remove(item); } } else { // 如果没有name属性,也删除该节点 item.parent?.children.remove(item); } } } // 5. 保存修改后的字典文件 final outputPath = dictFilePath.replaceAll('.dict', '_modified.xml'); File(outputPath).writeAsStringSync(dictDocument.toXmlString(pretty: true)); print('处理完成,结果已保存到: $outputPath'); } catch (e) { print('处理XML文件时出错: $e'); } }