处理XSLT输入文件以从XSLT中删除特定内容

时间:2018-06-12 14:16:02

标签: xml xslt

我需要处理XSLT代码,如果XSL标记元素的属性值为enable =“yes”,则必须从输出中删除相应的标记。

我输入的xsl文件如下所示,

    <xsl:stylesheet version = "1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" />


    <xsl:template match="/">   
    <xsl:for-each select="Node/Node_1">
    <node>
    <line enable="false"><xsl:value-of select="Line"/></line>
    <text><xsl:value-of select="Text"/></text>
    <desc enable="false"><xsl:value-of select="Desc"/></desc>
    <cust><xsl:value-of select="Cust"/></cust>
    </node>
    </xsl:for-each>
    </xsl:template>    
    </xsl:stylesheet> 

然后输出数据必须删除具有属性enable =“false”,

的相应XSL标记
    <xsl:stylesheet version = "1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" />


    <xsl:template match="/">   
    <xsl:for-each select="Node/Node_1">
    <node>
    <text><xsl:value-of select="Text"/></text>
    <cust><xsl:value-of select="Cust"/></cust>
    </node>
    </xsl:for-each>
    </xsl:template>    
    </xsl:stylesheet> 

通过XSLT本身是否可行,将xsl文件视为XML并处理它以删除具有enable =“false”属性的标记。或者有更好的方法来实现它吗?

2 个答案:

答案 0 :(得分:1)

为此,您必须在必须使用的地方写一个xslt:

  • 身份模板
  • 的模板

或者将xsl作为XML然后使用这个XSLT你会得到ouptpu:

onView(withId(R.id.forgotPasswordTextView)).check(matches(withUnderlinedText()));

答案 1 :(得分:1)

很容易做到这一点,空模板<xsl:template match="*[@enable = 'false']"/>和身份转换实现了这一点:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="3.0">

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:template match="*[@enable = 'false']"/>

</xsl:stylesheet>

https://xsltfiddle.liberty-development.net/jyH9rMh是一个XSLT 3示例,在早期版本的XSLT中,您需要用拼出的标识模板替换<xsl:mode on-no-match="shallow-copy"/>

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