我目前正在学习xml和DTD,遇到了一个有点令人费解的DTD。你知道吗
<!ELEMENT foo (superpowers*)>
<!ELEMENT superpowers ( foo | agility )>
首先,这个DTD合法吗?你知道吗
每当我试图生成一个对应的xml文件时,我都会遇到以下错误
Traceback (most recent call last): File "test.py", line 12, in foo.append(superpowers)\n File "src/lxml/etree.pyx", line 832, in lxml.etree._Element.append File "src/lxml/apihelpers.pxi", line 1283, in lxml.etree._appendChild ValueError: cannot append parent to itself
我在python中用于生成xml的代码由以下伪代码表示。你知道吗
from lxml import etree as xml
import pprint
foo = xml.Element("foo")
superpowers = xml.Element("superpowers")
x = True
if x :
foo = xml.Element("foo")
superpowers.append(foo)
foo.append(superpowers)
else :
agility = xml.Element("agility")
superpowers.append(agility)
foo.append(superpowers)
tree = xml.ElementTree(foo)
print (xml.tostring(tree, pretty_print=True))
with open("foo.xml", "wb") as op:
tree.write(op, pretty_print=True) #pretty_print used for indentation
我忽略了什么吗??你知道吗
是的,那部分DTD是合法的。(我之所以说partial是因为
agility
没有元素声明。)意思是
foo
可以包含零个或多个superpowers
,superpowers
必须正好包含一个foo
或agility
。你知道吗例如,根据DTD,这将是有效的。。。你知道吗
您得到的错误是有意义的;您不能
foo.append(superpowers)
,因为superpowers
已经是foo
的父级了。(就像哈里·邓恩说的,“你不能给劳埃德两枚邮票打三枚邮票!“)您需要做的是创建一个全新的
foo
并在其上附加superpowers
。你知道吗示例。。。你知道吗
而你最终得到的是(添加评论试图帮助澄清)。。。你知道吗
相关问题 更多 >
编程相关推荐