You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.5 KiB
74 lines
2.5 KiB
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'); |
|
} |
|
}
|
|
|