识别空 xml 文件?

识别空 xml 文件?

我需要识别所有空的 xml 文件名并将其写入文本文件以用于报告目的。空 ,这里意味着 xml 文件具有通常的标头标记,<?xml version="1.0" encoding="UTF-8"?>后跟空的打开和关闭标记。

示例文件:1)

<?xml version="1.0" encoding="UTF-8"?>
<STBTests>
</STBTests>

2)

<?xml version="1.0" encoding="UTF-8"?>
<UMTTests>
</UMTTests>

除此之外,xml 文件中没有任何数据。任何关于如何解决这个问题的建议都会很棒。

答案1

尝试使用这个与一个表达 :

#!/bin/sh

for xml in *.xml; do
    bool=$(xmllint --xpath 'count(//*)=1 and string-length(//*[1])=1' "$xml")
    if [ $bool = true ]; then
        echo "$xml" >> xml_list_files
    fi
done

cat xml_list_files

表达式测试该文件只有一个节点,没有任何文本内容。在这种情况下,命令返回true

答案2

识别所有空的 xml 文件名并将其写入文本文件以用于报告目的

find+xmlstarlet解决方案:

find . -type f -name "*.xml" -exec bash -c \
'v=$(xmlstarlet sel -t -i "count(//*)=1 and //*[1][not(normalize-space())]" -o 1 -b $1);
[[ -n "$v" ]] && echo "$1" >> "empty_xml.txt"' _ {} \;

empty_xml.txt文件应包含所需文件名/文件路径的列表

相关内容