Пространство имен ElementTree неудобство

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>

Это та же схема на всем протяжении, и мне нужен только один парсер для ее обработки. Как я могу справиться со всеми этими случаями? Мне нужно XPath и другие lxml лакомства, чтобы пройти через это. Как сделать его согласованным во время etree.parse? Я не хочу проверять пространства имен каждый раз, когда мне нужно использовать XPath.

  • 0
    ты обречен, извини
Теги:
lxml
elementtree

1 ответ

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>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню