我需要处理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”属性的标记。或者有更好的方法来实现它吗?
答案 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>