2012-06-14 1 views
0

Мой вывод xml должен быть замаскирован некоторыми элементами на основе переменной, флаг. Если флаг имеет значение «1», выходной XML должен иметь только элемент «a '(включая все его атрибуты и дочерние элементы). Если флаг равен 2, выход xml должен иметь элементы a и b. Если это 3, все элементы и атрибуты присутствуют на входе должен присутствовать на выходепреобразовать условно маскировать элементы и атрибуты из ввода

мой вход XML

<Root> 

<a ref="t"> 
<s id="2">value</s> 
</a> 
<b ref="t"> 
<s id="2">value</s> 
</b> 
<c ref="t"> 
<s id="2">value</s> 
</c> 
</Root> 

мой желаемый результат (когда флаг равен 1)

<Root> 

<a ref="t"> 
<s id="2">value</s> 
</a> 
</Root> 

xslt i попытался

<xsl:stylesheet version="1.0" 

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:variable name="flag" select="'1'"/> 


<xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*"> 

<xsl:copy> 

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

</xsl:copy> 

</xsl:template> 

<xsl:if test ="$flag ='1'"> 
<xsl:template match="b"></xsl:template> 
<xsl:template match="c"></xsl:template> 
</xsl:if> 

</xsl:stylesheet> 

ответ

0

Работает ниже xslt.

<xsl:stylesheet version="1.0" 

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:variable name="flag" select="'1'"/> 


<xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*"> 

<xsl:copy> 

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

</xsl:copy> 

</xsl:template> 


<xsl:template match="b"> 
<xsl:if test="$flag ='3' or $flag='2'"> 
    <xsl:copy> 
<xsl:apply-templates select="node()|@*"/> 
</xsl:copy> 
</xsl:if> 
</xsl:template> 

<xsl:template match="c"> 
<xsl:if test="$flag ='3'"> 
    <xsl:copy> 
<xsl:apply-templates select="node()|@*"/> 
</xsl:copy> 
</xsl:if> 
</xsl:template> 

</xsl:stylesheet>