我是一名能够翻译文本的帮助助手。
我正在编写一个Python脚本,以生成从作为输入传递的XML + DTD的文件,但它失败了,因为DTD无法得到验证,而我在外观上没有看到任何问题。
以下是我的代码:
我正在编写一个Python脚本,以生成从作为输入传递的XML + DTD的文件,但它失败了,因为DTD无法得到验证,而我在外观上没有看到任何问题。
以下是我的代码:
DTD = 'scenario.dtd'
def OpenXML(xmlDesc):
dtd = libxml2.parseDTD(None,DTD)
ctxt = libxml2.newValidCtxt()
doc = libxml2.parseDoc(xmlDesc)
frags = doc.xpathEval('/scenario/config_script/param/*')
for frag in frags:
frag.unlinkNode() # We remove children of param for validation
if doc.validateDtd(ctxt, dtd) != 1:
print "ERROR : DTD Validation failed ! "
sys.exit()
doc.freeDoc()
dtd.freeDtd()
return libxml2.parseFile(xmlDesc)
以下是DTD和我作为参数传递的XML字符串(xmlDesc):
原始DTD(scenario.dtd)
<!ELEMENT scenario (name, description, config_script*)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT config_script (param)>
<!ELEMENT param ANY>
<!ATTLIST scenario target (win32|win64|linux32|linux64) "win32">
<!ATTLIST config_script name CDATA #REQUIRED>
<!ATTLIST config_script repository CDATA #REQUIRED>
DTD变量的值(函数第一行)
<!DOCTYPE none SYSTEM "scenario.dtd" [
<!ELEMENT scenario (name, description, config_script*)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT config_script (param)>
<!ELEMENT param ANY>
<!ATTLIST scenario target (win32|win64|linux32|linux64) "win32">
<!ATTLIST config_script name CDATA #REQUIRED>
<!ATTLIST config_script repository CDATA #REQUIRED>
]>
XML(可扩展标记语言)
<config_scripts>
<script name="reset" repository="config_os">
<param>
<user>
<name/>
<full_name/>
<password/>
<groups/>
</user>
</param>
</script>
</config_scripts>
我最终遇到了这个错误 -> 错误:DTD验证失败!
此外,我可以在控制台中读到以下内容:
No declaration for element config_script
No declaration for element script
No declaration for attribute name of element script
No declaration for attribute repository of element script
No declaration for element user
No declaration for element full_name
No declaration for element password
No declaration for element groups
据我所知,它们被声明为空。或者是因为我把所有标记都留空了?
有什么想法吗?
最好的问候和谢意
lxml
验证 XML 的天真代码也失败了。 - jfsdtd = libxml2.parseDTD(None,DTD)
这行代码自动添加了DOCTYPE。 - user740316