Существует ли способ проигнорировать пространства имен во время преобразования XSL?

Вы хотите en-lemmatizer.bin, а не english-lemmatizer.txt

7
задан ilitirit 10 March 2009 в 14:05
поделиться

3 ответа

Вы могли сделать преобразование для удаления всех пространств имен из входа до "реального" преобразования. Но... Я не уверен, необходимо ли сделать это. Это чувствует себя ужасным.

<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="*">
    <xsl:element name="{local-name()}" >
      <xsl:apply-templates select="@*|node()"/>
    </xsl:element>
  </xsl:template>  

  <xsl:template match="@*">
    <xsl:attribute name="{local-name()}">
      <xsl:value-of select="." />
    </xsl:attribute>
  </xsl:template>  

</xsl:stylesheet>

Исходный ответ:

Это было бы опцией?

<xsl:template match="*[local-name()='element' and position()=1]">...

(поскольку комментарии показали - это не будет),

5
ответ дан 7 December 2019 в 10:08
поделиться

Сколько пространств имен находится там в XML том, чтобы быть преобразованным?

Если 1 может Вы временно добавлять что пространство имен как пространство имен по умолчанию Вашего XSL? Хорошо это означает, что Вы, возможно, должны были бы изменить выходное пространство имен и т.д., но когда-то протестировали Вас, мог удалить эти тонкие настройки.

Если существует больше чем 1, который подразумевает, что нет никаких локальных коллизий имени через пространства имен. Вы могли настроить тестовый входной XML так, чтобы все псевдонимы указали на то же пространство имен и затем выполнили тонкую настройку выше.

0
ответ дан 7 December 2019 в 10:08
поделиться

Я отправляю это как ответ, потому что это слишком длинно для установки как комментарий.

Никакой процессор XSLT, о котором я когда-либо даже слышал, не позволяет, Вы только к глобально игнорируете пространства имен во входе XML. Если у Вас есть XSL, преобразовывает, которые записаны в незнании пространств имен и XML-документах, которые используют их, Вы или должны использовать поврежденный сервлет, чтобы сделать преобразование или предварительно обработать XML-документы для удаления пространств имен.

Преобразование, которое отправил Tomalak, сделает это - и в отличие от использования регулярных выражений, он сделает это, не завинчивая все остальное в XML. И это не в значительной степени работа, чтобы сделать это, также. Преобразования объединения в цепочку довольно легки.

1
ответ дан 7 December 2019 в 10:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: