展开默认(dita)属性

2024-06-01 00:31:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我的pythonlibxml2使用默认属性对文件进行不同的处理,这取决于我想知道什么。该示例使用DITADTD(可以在www.dita-ot.org)公司名称:

import libxml2
import libxsltmod

s = """<!DOCTYPE map PUBLIC "-//OASIS//DTD XDITA Map//EN"
"file://.../dita-ot-2.2.1/plugins/org.oasis-open.dita.v1
_2/dtd/technicalContent/dtd/map.dtd">

<map title="Empty map">
</map>"""

libxml2.substituteEntitiesDefault(1)
xmldoc = libxml2.parseDoc(s)
print xmldoc

输出符合要求:

^{pr2}$

但是如果我注释掉import libxsltmod,结果是:

^{3}$

因此,libxsltmod做了一些事情来激活默认属性扩展。你能建议我怎样通过python激活这个功能吗?在


Tags: 文件orgimport示例map属性wwwot
2条回答

我不知道libxsltmod如何全局启用此设置,但通常,DTD默认属性是用parser optionXML_PARSE_DTDATTR添加的。使用readDoc而不是parseDoc来提供解析器选项:

xmldoc = libxml2.readDoc(s, None, None, libxml2.XML_PARSE_DTDATTR)

或者,如果还想替换实体:

^{pr2}$

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

{{cd2>设置全局变量的初始化:

xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;

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

^{pr2}$

Python/C函数readDoc就是这样执行的(创建上下文、设置选项、解析)。手动创建上下文是冗长的,但在某些情况下可能是必要的。在

相关问题 更多 >