【问题标题】:python 2.7 XML lxml namespace prefix attribute issuespython 2.7 XML lxml命名空间前缀属性问题
【发布时间】:2014-01-22 22:06:46
【问题描述】:

所以,我已经看到了很多针对这个问题的答案,但是他们没有明确说明如何在命名空间前缀在整个 XML 文档范围内发生变化时调整它。

我有什么:

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <ns0:Description xmlns:ns0="http://purl.org/NET/FOO">
    </ns0:Description>
</rdf:RDF>

我想要什么:

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description rdf:about="http://purl.org/NET/FOO">
    </rdf:Description>
</rdf:RDF>

为了澄清,我希望子 SubElement 的 xmlns:rdfsrdf:about

过去在 Python2.5 中的工作原理:

rdf_description = SubElement(
    root,
    '{http://www.w3.org/1999/02/22-rdf-syntax-ns#}Description',
    {'rdf:about':vocab_namespace}
)

我在 Python2.7 中的尝试:

register_namespace('rdf', 'rdf:about')
rdf_description = SubElement(
    root,
    '{http://www.w3.org/1999/02/22-rdf-syntax-ns#}Description',
    nsmap={'rdf': rdf_url}
)

... 好吧我已经尝试过了,而且排列的时间太长而无法列出(这就是我目前拥有的方式),但我似乎无法按照我的需要移动位他们。

如果一个真正的 lxml 忍者能够从他们的快乐宫殿中走出来并指导这个新手,我将永远感激不尽。

【问题讨论】:

    标签: python xml python-2.7 lxml xml-namespaces


    【解决方案1】:

    这对你有用吗?

    RDFNS = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    root = lxml.etree.Element('{%s}RDF' % RDFNS, nsmap={'rdf': RDFNS})
    rdf_description = lxml.etree.SubElement(
        root,
        '{%s}Description' % RDFNS,
        {"{%s}about" % RDFNS: "http://purl.org/NET/FOO"})
    

    检查输出:

    >>> print lxml.etree.tostring(root, pretty_print=True)
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about="http://purl.org/NET/FOO"/>
    </rdf:RDF>
    
    >>> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多