首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >展开默认(dita)属性

展开默认(dita)属性
EN

Stack Overflow用户
提问于 2016-01-20 08:10:27
回答 2查看 270关注 0票数 1

我的python libxml2使用默认属性处理文件,这取决于我想知道什么。该示例使用DITA DTD (包可在www.dita-ot.org上下载):

代码语言:javascript
复制
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

所需的产出如下:

代码语言:javascript
复制
<?xml version="1.0"?>
<!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 xmlns:ditaarch="http://dita.oasis-open.org/architecture/2005/"
  title="Empty map" ditaarch:DITAArchVersion="1.2" domains="(topic delay-d)
  (map mapgroup-d)                           (topic indexing-d)
  (map glossref-d)                          (topic hi-d)
  (topic ut-d)                           (topic hazard-d)
  (topic abbrev-d)                          (topic pr-d)
  (topic sw-d)                          (topic ui-d)
  " class="- map/map ">
</map>

但如果我评论一下import libxsltmod,结果是:

代码语言:javascript
复制
<?xml version="1.0"?>
<!DOCTYPE map PUBLIC "-//OASIS//DTD XDITA Map//EN"
"file://.../dita-ot-2.2.1/plugins/org.oasis-open.dita.v
1_2/dtd/technicalContent/dtd/map.dtd">
<map title="Empty map">
</map>

因此,libxsltmod可以激活默认属性扩展。请您提出建议,以及我如何通过python激活这个功能?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-20 15:38:04

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

代码语言:javascript
复制
xmldoc = libxml2.readDoc(s, None, None, libxml2.XML_PARSE_DTDATTR)

或者,如果您也想替换实体:

代码语言:javascript
复制
flags = libxml2.XML_PARSE_NOENT | libxml2.XML_PARSE_DTDATTR
xmldoc = libxml2.readDoc(s, None, None, flags)
票数 2
EN

Stack Overflow用户

发布于 2016-01-21 07:50:40

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

初始化函数initlibxsltmodlibxslt模块设置全局变量:

代码语言:javascript
复制
xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;

我没有发现从libxml2 Python/C绑定代码中访问这个变量的任何可能性,但我发现这个变量用于初始化默认的‘解析器上下文’,并且可以手动创建和使用解析器上下文:

代码语言:javascript
复制
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以这种方式执行(创建上下文、设置选项、解析)。手动上下文createion是冗长的,但在某些情况下可能是必要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34894664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档