xsl: копия исключая родителя - PullRequest
7 голосов
/ 18 ноября 2009

Какой код можно использовать вместо <xsl:copy-of select="tag"/>, который применительно к следующему xml ..

<tag>
  content
  <a>
    b
  </a>
</tag>

.. даст следующий результат:?

content
<a>
  b
</a>

Я хочу вывести на экран все содержимое, кроме родительского тега


В основном у меня есть несколько разделов содержимого в моем файле xml, отформатированных в html, сгруппированных в теги xml
Я хочу получить к ним условный доступ и повторить их
Например: <xsl:copy-of select="description"/>
Сгенерированные дополнительные родительские теги не влияют на отображение в браузере, но они являются недействительными тегами, и я предпочел бы иметь возможность удалить их
Я поступаю об этом совершенно неправильно?

Ответы [ 2 ]

12 голосов
/ 18 ноября 2009

Поскольку вы также хотите включить деталь content, вам понадобится функция node(), а не оператор *:

<xsl:copy-of select="tag/node()"/>

Я проверил это на входном примере, и результат - пример:

content
<a>
  b
</a>

Без жесткого кодирования имени корневого узла это может быть:

<xsl:copy-of select="./node()" />

Это полезно в ситуациях, когда вы уже обрабатываете корневой узел и хотите получить точную копию всех элементов внутри, кроме корневого узла. Например:

<xsl:variable name="head">
  <xsl:copy-of select="document('head.html')" />
</xsl:variable>
<xsl:apply-templates select="$head" mode="head" />

<!-- ... later ... -->

<xsl:template match="head" mode="head">
  <head>
  <title>Title Tag</title>
  <xsl:copy-of select="./node()" />
  </head>
</xsl:template>
3 голосов
/ 18 ноября 2009

В дополнение к ответу Велбога, который имеет мой голос, я рекомендую написать отдельные шаблоны в соответствии с этим:

<xsl:template match="/">
  <body>
    <xsl:apply-templates select="description" />
  </body>
</xsl:template>

<xsl:template match="description">
  <div class="description">
    <xsl:copy-of select="node()" />
  </div>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...