【问题标题】:ElementTree namespace incovenienceElementTree 命名空间不便
【发布时间】:2011-02-23 16:18:33
【问题描述】:

我无法控制获得的 XML 的质量。在某些情况下是:

<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
...
</COLLADA>

在其他我得到:

 <COLLADA>...</COLLADA>

我想我也应该处理

 <collada:COLLADA xmlns:collada="http://www.collada.org/2005/11/COLLADASchema">
 ...
 </collada:COLLADA>

这是相同的架构,我只需要一个解析器来处理它。我该如何处理所有这些情况?我需要 XPath 和其他 lxml 好东西来解决这个问题。如何在 etree.parse 期间使其保持一致?我不想每次需要使用 XPath 时都检查命名空间。

【问题讨论】:

    标签: python xml lxml elementtree


    【解决方案1】:

    我通常的建议是先对其进行预处理,以规范命名空间。这有两个好处:规范化代码高度可重用,因为它不依赖于随后如何处理数据;处理数据的逻辑也大大简化了。

    如果文档只使用这一个命名空间,或者没有,并且在文本或属性节点的内容中不使用限定名,那么实现这种规范化的转换很简单:

    <xsl:template match="*">
      <xsl:element name="local-name()" namespace="http://www.collada.org/2005/11/COLLADASchema">
        <xsl:copy-of select="@*"/>
        <xsl:apply-templates/>
      </xsl:element>
    </xsl:template>
    

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 2020-12-26
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      相关资源
      最近更新 更多