例如,我有一个包含以下内容的 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