1

取得した 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>

全体的に同じスキーマであり、それを処理するために必要なパーサーは 1 つだけです。これらすべてのケースをどのように処理できますか? これを乗り越えるには、XPath やその他の lxml グッズが必要です。etree.parse 時に一貫性を持たせるにはどうすればよいですか? XPath を使用する必要があるたびに名前空間をチェックする必要はありません。

4

1 に答える 1

1

私の通常の推奨事項は、名前空間を正規化するために、最初に前処理することです。これには 2 つの利点があります。データがその後どのように処理されるかに依存しないため、正規化コードは高度に再利用可能です。また、データを処理するロジックが大幅に簡素化されます。

ドキュメントがこの 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>
于 2011-02-23T18:16:55.917 に答える