遍历指定目录生成查找xml文件,输出XML内textView节点没有textsize节点
Python 脚本实现
import os
import xml.etree.ElementTree as ET
def find_textviews_without_textsize(xml_file):
try:
tree = ET.parse(xml_file)
root = tree.getroot()
textviews_without_textsize = []
for elem in root.findall('.//*[@class="android.widget.TextView"]'):
if 'textSize' not in elem.attrib:
textviews_without_textsize.append(elem)
return textviews_without_textsize
except Exception as e:
print(f"解析 {xml_file} 时出错: {e}")
return []
def traverse_directory(directory):
for root_dir, _, files in os.walk(directory):
for file in files:
if file.endswith('.xml'):
xml_file = os.path.join(root_dir, file)
result = find_textviews_without_textsize(xml_file)
if result:
print(f"在文件 {xml_file} 中找到 {len(result)} 个没有 textsize 属性的 TextView 节点:")
for textview in result:
print(f" - 节点属性: {textview.attrib}")
if __name__ == "__main__":
import sys
if len(sys.argv) != 2:
print("用法: python script.py <目录路径>")
sys.exit(1)
target_dir = sys.argv[1]
if not os.path.isdir(target_dir):
print(f"{target_dir} 不是有效的目录。")
sys.exit(1)
traverse_directory(target_dir)
代码解释
1.find_textviews_without_textsize函数 :该函数接收一个 XML 文件路径作为输入,尝试解析该 XML 文件。使用 findall 方法查找所有 class 属性为 android.widget.TextView 的节点,然后筛选出没有 textSize 属性的节点并返回。
2.traverse_directory函数 :此函数接收一个目录路径,使用 os.walk 递归遍历该目录及其子目录下的所有文件。对于每个以 .xml 结尾的文件,调用 find_textviews_without_textsize 函数进行检查。如果找到符合条件的节点,则输出相关信息。
3.主程序:检查命令行参数,确保用户提供了一个有效的目录路径。如果路径无效,输出错误信息并退出程序;否则,调用 traverse_directory 函数开始遍历目录。