2011-02-23 90 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> 
相關問題