выбор конкретных деревьев подэлементных узлов для вывода с использованием xslt - PullRequest
1 голос
/ 25 марта 2011

У меня есть XML, в котором есть дополнительный элемент, и я хочу, чтобы его не было.Входной XML:

<top><middle><bottom><!-- other elements --><stuff/></bottom></middle></top>

Требуемый вывод:

<top><bottom><!--other elements --><stuff/></bottom></top>

(обратите внимание, что "средний" элемент был вырван из дерева узлов)

Как произвольно отхватить элемент, не создавая каскад шаблонов для каждого возможного элемента в источнике?Есть ли способ просто передать все элементы и подэлементы из заданной точки?включая теги XML, атрибуты и контент?

Поиски, которые я упомянул, используют <xsl:copy>, но это не работает - "node()|@*" возвращает только контент и значение атрибута, а не фактическое дерево XML подэлемента.

Как мне это сделать в XSLT 1 или 2?То, как я делаю это сейчас, - это создание дерева шаблонов для каждого элемента, кроме «материала»?

1 Ответ

2 голосов
/ 25 марта 2011

Используйте преобразование идентичности с переопределением для элементов, которые вы хотите удалить:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="middle">
      <xsl:apply-templates/>
  </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...