2015-09-15 4 views
0

Я пытаюсь удалить пустые узлы, но не все из них, например, у меня есть метки:Удалить пустые узлы

1.<abc></abc> - it should be delete 
2.<cde/> - it should not be delete. 
3.<fgh/> - it SHOULD be delete. 

Таким образом, я хотел бы, чтобы удалить пустые узлы в пункте 2 (явное имя «CDE»)

Иными словами: когда тег типа 'cde' и тег равен нулю, тогда удалите. : D

Возможно ли это?

Я нашел код, который удалит все пустые узлы:

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="*[descendant::text() or descendant-or-self::*/@*[string()]]"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="@*[string()]"> 
    <xsl:copy/> 
</xsl:template> 

</xsl:stylesheet> 

EDIT:

XML выглядит следующим образом:

<system/> 
      <smth></smth> 
      <smth2>?</smth2> 
      <smth3>?</smth3> 
      <smth4></smth4> 
      <smth4></smth4> 
      <smth5/> 

XML может содержать много тегов, как - SO я удалили их динамически. Некоторые теги, которые выглядят как Я ХОЧУ удалить. Но в этом XML должен остаться.

Так выход XML должно выглядеть:

<system/> 
       <smth2>?</smth2> 
       <smth3>?</smth3> 




I found the solution: http://xsltransform.net/nc4NzRx/3. :) 
+0

Ваши требования кажутся противоречащими. –

+0

Почему? Я просто DONT хочу удалить явный тег. В этом случае имя: CDE. – bazylwro

+0

Но ваши вопросы говорят «2. - его не следует удалять». а затем позже: «Я хотел бы удалить пустые узлы в точке 2 (явное имя« CDE »), поэтому первое цитируемое предложение противоречит второму цитированному. –

ответ

0

Если вы хотите, чтобы скопировать все, но удалить пустые cde элементы затем использовать таблицу стилей со следующими двумя шаблонами

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

<xsl:template match="cde[not(node())]"/> 
+0

Привет, Мартин. Неудачно это не работает ... Я что-то делаю неправильно? Не могли бы вы проверить? http://xsltransform.net/gWmuiKt – bazylwro

+0

Мое предложение в виде полной таблицы стилей похоже на http://xsltransform.net/nc4NzRx, а не на то, что вы пробовали. –

+0

Мартин благодарит. Это почти то, чего я хотел. Можно ли удалить тег, который похож на ? Также как здесь: http://xsltransform.net/nc4NzRx/1. В этом случае: correId. Результат должен выглядеть как сейчас WITHOUT correIDID. – bazylwro

Смежные вопросы