空の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

この式は、ファイルにノードが1つだけあり、テキストコンテンツがないかどうかをテストします。この場合、コマンドは次を返します。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ファイルには、必要なファイル名/ファイルパスのリストを含める必要があります。

関連情報