Как удалить родительский тег, сохранив его дочерний элемент - PullRequest
0 голосов
/ 15 февраля 2019

Как удалить родительский тег с сохранением его дочерних элементов, если порядок дочерних и родительских тегов не соответствует ожидаемому?

xml Ввод:

<div>
<b>
<a>correct info</a>
</b>
</div>
<div>
<b>
<a>additional info</a>
<i>italic form</i>
</b>.

<xsl:template match="b/a">
       <xsl:copy-of select="a"/>
    </xsl:template>

Фактический результат:

<div> 
<b/>
</div>
<div>
</b>
<i>italic form</i>
</div>

Ожидаемый результат:

    <div>
    <a>correct info</a>
    </div>
    <div>
    <a>additional info</a>
    <i>italic form</i>
</div>

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Если у вас есть определенный элемент «a» в качестве дочернего элемента для «b», решение michael.hor работает.ID, вы можете иметь любой элемент в качестве детей.здесь в примере у вас есть а и я, как дети б, тогда

<xsl:template match="b">
    <xsl:apply-templates select="@* | node()" mode="suppress"/>       
</xsl:template>


<xsl:template match="@* | node()[not(self::b)]" mode="suppress">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()" mode="suppress"/>
  </xsl:copy>
</xsl:template>


<xsl:template match="@* | node()">
   <xsl:copy>
       <xsl:apply-templates select="@* | node()"/>
   </xsl:copy>
</xsl:template>
0 голосов
/ 15 февраля 2019

Вместо:

<xsl:template match="b/a">
   <xsl:copy-of select="a"/>
</xsl:template>

Попробуйте:

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