我有一个无效的xml文件(它是另一个进程的输出),我需要在Linux(bash脚本)中对其进行验证。 在无效文件中,有空标签-没有关闭标签,如:
<om>
<om>
<some data>
</some data>
</om>
我尝试运行以下命令:
xsltproc prepare_v270.xsl test.xml > /tmp/test.xml.bak
test.xml:413282: parser error : Excessive depth in document: 256 use XML_PARSE_HUGE option
<om>
^
无法解析test.xml 2.使用xmlstarlet
sudo xmlstarlet ed -d '//*[not(normalize-space())]' test.xml
test.xml:413282.5: Excessive depth in document: 256 use XML_PARSE_HUGE option
<om>
^
依此类推
我试图编写一个bash脚本,以通过以下脚本删除与<om>
单词对应的每一行<om>
:
#!/bin/sh
sed '
/\<om\>/ {
#append the next line
N
# look for "<om>" followed by "<om>"
/\<om\>.*\<om\>/ {
# print
P
# then delete the first line
D
}
}' <old.xml >new.xml
但这不起作用。
答案 0 :(得分:0)
我找到了解决方法-如果下一行相同,则删除文件中的一行。 此逻辑会在同一打开标签之前删除该打开标签。
pre=
while IFS='' read -r line || [[ -n "$line" ]]; do
# echo "Line read from file: $line"
# if line does not contain line pre
if ! { [ -n "$pre" ] && [[ "$line" == "$pre" ]] ; }; then
# echo " <$pre> not found!"
echo "$line"
pre=$line
fi
done <old.xml >new.xml
谢谢大家!