Python 展开默认(dita)属性

Python 展开默认(dita)属性,python,libxml2,dita,Python,Libxml2,Dita,根据我想知道的内容,我的python libxml2以不同的方式处理具有默认属性的文件。例如,使用DITA DTD(该软件包可在www.DITA-ot.org上下载): 因此,libxsltmod可以激活默认属性扩展。您能建议我如何通过python激活此功能吗?我不知道libxsltmod如何全局启用此设置,但通常情况下,DTD默认属性是通过XML\u PARSE\u DTDATTR添加的。使用readDoc而不是parseDoc提供解析器选项: xmldoc = libxml2.readDoc

根据我想知道的内容,我的python libxml2以不同的方式处理具有默认属性的文件。例如,使用DITA DTD(该软件包可在www.DITA-ot.org上下载):

因此,libxsltmod可以激活默认属性扩展。您能建议我如何通过python激活此功能吗?

我不知道libxsltmod如何全局启用此设置,但通常情况下,DTD默认属性是通过
XML\u PARSE\u DTDATTR
添加的。使用
readDoc
而不是
parseDoc
提供解析器选项:

xmldoc = libxml2.readDoc(s, None, None, libxml2.XML_PARSE_DTDATTR)
或者,如果您还想替换实体:

flags = libxml2.XML_PARSE_NOENT | libxml2.XML_PARSE_DTDATTR
xmldoc = libxml2.readDoc(s, None, None, flags)

我已经接受了@nwellnhof的答案,但也希望公布我的调查结果

libxslt
模块的初始化函数
initlibxsltmod
设置全局变量:

xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
我没有发现从
libxml2
Python/C绑定代码访问此变量的任何可能性,但我发现此变量用于初始化默认的“解析器上下文”,并且可以手动创建和使用解析器上下文:

ctxt = libxml2.createDocParserCtxt(s)
opts = libxml2.XML_PARSE_NOENT | libxml2.XML_PARSE_DTDATTR
ctxt.ctxtUseOptions(opts)
ctxt.parseDocument()
xmldoc = ctxt.doc()
del ctxt

Python/C函数
readDoc
以这种方式执行(创建上下文、设置选项、解析)。手动上下文创建很详细,但在某些情况下可能是必要的。

感谢您指向
readDoc
函数。但是,请更正您的答案,标志应该是
libxml2.XML\u PARSE\u NOENT | libxml2.XML\u PARSE\u DTDATTR
flags = libxml2.XML_PARSE_NOENT | libxml2.XML_PARSE_DTDATTR
xmldoc = libxml2.readDoc(s, None, None, flags)
xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
ctxt = libxml2.createDocParserCtxt(s)
opts = libxml2.XML_PARSE_NOENT | libxml2.XML_PARSE_DTDATTR
ctxt.ctxtUseOptions(opts)
ctxt.parseDocument()
xmldoc = ctxt.doc()
del ctxt