python-3.x - 如何在 python 中创建带有实体的 DOCTYPE
问题描述
我希望用 ENTITIES 创建一些 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'})
解决方案
另一种选择是在函数或方法doctype
中使用arg 。tostring()
write()
例子...
etree.tostring(gdml, doctype=docString).decode()
或者
etree.ElementTree(gdml).write("output.xml", doctype=docString)
推荐阅读
- python - 使用 QPainter 覆盖两个具有 alpha 值的像素图
- javascript - Electron + xmpp.js:如何调试 SSL 自签名错误消息?
- c# - JsonConvert.DeserializeObject
返回空列表 - java - 合并排序逻辑错误
- javascript - 为什么在内联函数中使用时出现“no-unused-var”错误
- python - 将时间序列数据帧中的异常值重置为 3 SD
- dns - 将根域设置为链接
- image - libvips 从 Ex40 而非地图中提取 NDPI 区域
- php - 来自日志表的 Laravel Eloquent 最新状态
- python - fillna 不能与 Pandas DataFrame 中的列条件一起使用