识别 XML 文件中的空值并返回退出命令?

识别 XML 文件中的空值并返回退出命令?

例如,我有一个包含以下内容的 XML 文件,“NAME”作者和受让人的“VALUE”为空。主要目的是实现可用于查找具有空值的 XML 文件的检查。那么有没有一种方法可以创建一个可以用作 git hook(预提交)的脚本,以便脚本的输入是 git commit (该存储库中的所有文件)或 git commit (文件名)。然后,如果 XML 文件具有空值,则脚本不应允许提交。

<?xml version="1.0" encoding="utf-8"?>
<PACKAGE format-rev="7" prog-version="2020.2.98572" xmlns=https..." xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <INFORMATION format-rev="2" xsi:type="packageInfo">
        <ATTRIBUTES>
            <ATTRIBUTE xsi:type="attributeInst">
                <NAME xsi:type="string">Type</NAME>
                <VALUE xsi:type="string">MANUAL</VALUE>
            </ATTRIBUTE>
            <ATTRIBUTE xsi:type="attributeInst">
                <NAME xsi:type="string">Severity</NAME>
                <VALUE xsi:type="string">Normal</VALUE>
            <ATTRIBUTE xsi:type="attributeInst">
                <NAME xsi:type="string">Author</NAME>
                <VALUE xsi:type="string"/>
            </ATTRIBUTE>
            <ATTRIBUTE xsi:type="attributeInst">
                <NAME xsi:type="string">Assignee(s)</NAME>
                <VALUE xsi:type="string"/>
        </ATTRIBUTES>

有没有比下面所示的方法更好的方法? TIA

def xmlvalidator():
    dirlist = []
    dirlist.append(os.getcwd().replace("\\","/"))
    filelists = filelist(dirlist)
    Flagvallists = []
    for filename in filelists:
        xtree = et.parse(filename)
        root = xtree.getroot()
        xroot = root[0][0]
        flag = 0
        flagval = []

        for i in range(len(xroot)):
            #xroot here should ATTRIBUTES (ATTRIBUTE IN ATTRIBUTES)
            s_name = xroot[i][0].text
            s_value = xroot[i][1].text
            if s_value == None:
                flagval.append(s_name)   
                flag = 1      

        if flag==1:             
            flagval.append(filename)
        Flagvallists.append(flagval)
        #sys.exit(1)
        #return True
    return Flagvallists

编辑:感谢@Paul_Pedant 似乎是一个简单而伟大的解决方案,但是输入如何与 git commit 调用的输入相同?而不是文件名(A.xml)

if grep "<VALUE[^>]*/>" A.xml; then
    echo errors found
else
    echo not found
fi

相关内容