我的公司正在从制造转向scons。make过程的一部分是对许多xml文件调用xmllint,以根据模式对它们进行验证。
我的SConstruct中有以下内容:
import os;
Env = DefaultEnvironment()
pwd = Dir('.').path
xmlValidator = Builder(action = 'xmllint --noout --schema '+pwd+'/path/schema.xsd '+pwd+'file.xml')
Env.Append(BUILDERS = {'ValidateXML' : xmlValidator})
Env.ValidateXML()当我运行时:
scons -Q我得到了:
scons: `.' is up to date.但是没有运行任何验证。
我做错了什么?
我对scons完全陌生,对Python也比较熟悉。
发布于 2009-12-01 16:46:52
您需要为scons提供一个输入文件。您当前已将源文件硬编码到构建器“配方”中。最好在操作字符串中使用源占位符,然后在调用构建器时指定输入文件。
xmlValidator = Builder(action='xmllint --noout --schema '+
pwd+'/path/schema.xsd $SOURCE')
Env.Append(BUILDERS = {'ValidateXML' : xmlValidator})
Env.ValidateXML(source='file.xml')这将始终运行验证,因此您可能希望让它将结果输出到文件中。为此,您可以使用目标占位符,例如:
xmlValidator = Builder(action='xmllint --schema '+
pwd+'/path/schema.xsd $SOURCE --output $TARGET')
Env.ValidateXML(source='file.xml', target="out.txt")发布于 2020-09-19 21:11:00
假设您还将XML文件用作其他构建器的输入。通过使用具有多个操作的构建器,您可以在该阶段执行验证。如下所示:
xslt = Builder(action=['xmllint --noout --schema /path/to/schema.xsd $SOURCE',
'xsltproc --output $TARGET /path/to/style.xsl $SOURCE'])
Env.Append(BUILDERS = {'XSLT' : xslt})使用此解决方案,不需要创建任何不必要的文件。如果生成了XML文件,您可以类似地创建一个构建器,该构建器既生成文件又执行验证。
https://stackoverflow.com/questions/1822055
复制相似问题