Простой оператор IF в XSLT two удаляет один элемент, если найден - PullRequest
2 голосов
/ 06 октября 2011

Я преобразую несколько различных структур файлов XML одновременно, используя XSLT.

Некоторые из них имеют тег элемента <link></link> в своей структуре, а другие имеют либо <feedburner:origLink></feedburner:origLink> и <link></link>, либо оба.

У меня вопрос, как мне удалить <feedburner:origLink></feedburner:origLink>, когда обнаружен тег <link></link>?

Это то, что я сейчас использую, и некоторые XML-файлы дважды содержат тег элемента <url></url>.

<xsl:template match="feedburner:origLink | link">
  <url>
        <xsl:apply-templates select="node() | @*" />
  </url>
</xsl:template>

Ответы [ 2 ]

1 голос
/ 07 октября 2011

В XSLT 2.0 вы можете использовать решение, аналогичное

<xsl:apply-templates select="(link, feedburner:origLink)[1]"/>
0 голосов
/ 06 октября 2011

Один из подходов - сопоставить элемент с предикатом, указывающим, что другого нет:

<xsl:template match="feedburner:origLink[not(../link)] | link">
  <url>
        <xsl:apply-templates select="node() | @*" />
  </url>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...