如何在 python 中创建包含 ENTITIES 的 DOCTYPE
How do I create a DOCTYPE with ENTITIES in python
我希望创建一些带有 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'})
谢谢丹尼尔
我通过
设法添加了没有 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"))
另一种选择是在 tostring()
function or the write()
method.
中使用 doctype
arg
示例...
etree.tostring(gdml, doctype=docString).decode()
或
etree.ElementTree(gdml).write("output.xml", doctype=docString)
我希望创建一些带有 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'})
谢谢丹尼尔
我通过
设法添加了没有 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"))
另一种选择是在 tostring()
function or the write()
method.
doctype
arg
示例...
etree.tostring(gdml, doctype=docString).decode()
或
etree.ElementTree(gdml).write("output.xml", doctype=docString)