2013-10-03 3 views
0

Может кто-нибудь объяснить, как я могу преобразовать входной XML в выходной XML, показанный ниже, используя XSLT. Мне нужно удалить «RElement» в XML, который не имеет элемента «Тип» со значением «Учетная запись» в дочерних дочерних элементах. «RElement» рекурсивный.Элементы удаления XSLT в XML

Входной XML-

<RElement> 
<Type>Group</Type> 
<RElement> 
<Type>Group</Type> 
<RElement> 
    <Type>Account</Type> 
</RElement> 
</RElement> 
<RElement> 
<Type>Group</Type> 
<RElement> 
    <Type>Group</Type> 
    <RElement> 
    <Type>Group</Type> 
    </RElement> 
</RElement> 
</RElement> 
</RElement> 

Выходной XML-

<RElement> 
<Type>Group</Type> 
<RElement> 
<Type>Group</Type> 
<RElement> 
    <Type>Account</Type> 
</RElement> 
</RElement> 
</RElement> 
+1

Что вы пробовали до сих пор? Пожалуйста, отредактируйте вопрос и покажите свой текущий XSLT. –

ответ

0

Вы можете попробовать это:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml"/> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="RElement[not(.//Type[text() = 'Account'])]" /> 
</xsl:stylesheet> 

В основном это тождественное преобразование с пустым шаблоном для RElement элементов, Безразлично» t имеет элемент «Тип» со значением «Учетная запись» в дочерних дочерних элементах.

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

<xsl:template match="RElement[not(.//Type = 'Account')]" /> 
+1

Или проще, '' - вам не нужно 'text()' в этой ситуации, потому что вам нужно полное строковое значение элемента 'Type', а не отдельный текстовый узел (узлы) внутри него. –

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