Identifica arquivos xml vazios?

1

Eu tenho um requisito para identificar e gravar todos os nomes de arquivos xml que estão vazios em um arquivo de texto para fins de relatório. Vazio, aqui significa que o arquivo xml tem a tag de cabeçalho usual <?xml version="1.0" encoding="UTF-8"?> seguida por uma tag de abertura e fechamento vazia.

Arquivo de amostra: 1)

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

2)

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

Não há dados nos arquivos xml além disso. Qualquer sugestão sobre como abordar isso seria ótima.

    
por Kavin Palaniswamy 15.03.2018 / 21:52

2 respostas

2

Tente isso usando com um expressão:

#!/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

A expressão testa que o arquivo tem apenas um nó sem qualquer conteúdo de texto. Nesse caso, o comando retorna true

    
por 15.03.2018 / 22:30
0

to identify and write all xml file names which are empty to a text file for reporting purpose

Solução

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"' _ {} \;
O arquivo

empty_xml.txt deve conter uma lista de nomes de arquivos / caminhos de arquivos necessários

    
por 15.03.2018 / 23:35

Tags