Python ElementTree命名空间不方便

Python ElementTree命名空间不方便,python,xml,lxml,elementtree,Python,Xml,Lxml,Elementtree,我无法控制得到的XML的质量。在某些情况下: <COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1"> ... </COLLADA> ... 在其他方面,我得到: <COLLADA>...</COLLADA> 。。。 我想我也应该处理 <collada:COLLADA xmlns:collada="http://www.colla

我无法控制得到的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时都检查名称空间。

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

如果文档仅使用这一名称空间,或者不使用名称空间,并且在文本或属性节点的内容中不使用限定名称,那么实现此规范化的转换非常简单:

<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>

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

如果文档仅使用这一名称空间,或者不使用名称空间,并且在文本或属性节点的内容中不使用限定名称,那么实现此规范化的转换非常简单:

<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>