如何解决如何在python中使用ENTITIES创建DOCTYPE
我希望使用以下实体创建一些gdml
<!DOCTYPE gdml [
<!ENTITY define SYSTEM "define.xml">
<!ENTITY materials SYSTEM "materials.xml">
<!ENTITY solids SYSTEM "fredF4-solids.xml">
<!ENTITY structure SYSTEM "fredF4-structure.xml">
]>
我创建了一个字符串
docString ='<!DOCTYPE gdml [<!ENTITY define SYSTEM "define.xml"><!ENTITY materials SYSTEM "materials.xml"><!ENTITY solids SYSTEM "fredF4-solids.xml"><!ENTITY structure SYSTEM "fredF4-structure.xml">]>'
但是如果我编码elem = ET.fromstring(docString)
我得到一个错误并且与之相同
elem = ET.XML(docString)
File "src/lxml/etree.pyx",line 3216,in lxml.etree.XML
File "src/lxml/parser.pxi",line 1896,in lxml.etree._parseMemoryDocument
File "src/lxml/parser.pxi",line 1777,in lxml.etree._parseDoc
File "src/lxml/parser.pxi",line 1082,in lxml.etree._BaseParser._parseUnicodeDoc
File "src/lxml/parser.pxi",line 615,in lxml.etree._ParserContext._handleParseResultDoc
File "src/lxml/parser.pxi",line 725,in lxml.etree._handleParseResult
File "src/lxml/parser.pxi",line 654,in lxml.etree._raiseParseError
<class 'lxml.etree.XMLSyntaxError'>: Start tag expected,'<' not found,line 1,column 189 (<string>,line 1)
我应该指出,我正在尝试将!DOCTYPE信息添加为GDML文件的一部分,该文件当前已成功通过
进行了声明。 !NS = 'http://www.w3.org/2001/XMLSchema-instance'
location_attribute = '{%s}noNameSpaceSchemaLocation' % NS
gdml = ET.Element('gdml',attrib={location_attribute: 'http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd'})
解决方法
另一种选择是在tostring()
function或write()
method中使用doctype
arg。
示例...
etree.tostring(gdml,doctype=docString).decode()
或
etree.ElementTree(gdml).write("output.xml",doctype=docString)
,
感谢丹尼尔
我设法通过添加不带gdml元素的DocString
!NS = 'http://www.w3.org/2001/XMLSchema-instance'
location_attribute = '{%s}noNameSpaceSchemaLocation' % NS
gdml = ET.Element('gdml',attrib={location_attribute: 'http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd'})
和
docString += ET.tostring(gdml).decode("UTF-8"))
gdml = ET.fromstring(docString.encode("UTF-8"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。