2011-02-23 88 views
1

我无法控制我得到的XML的质量。在某些情况下,它是:ElementTree命名空间不方便

<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时,我都不想检查名称空间。

+0

你”重新注定,对不起 – nosklo 2011-02-23 17:37:20

回答

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> 
相关问题