0

我有一些 XML,看起来像这样:

<region class="TableInfo">
text
</region>
<region>
text
</region>

我想编写只保留没有 class="TableInfo" 的部分的 XSL。

我尝试了许多不同的方法,包括:

<xsl:for-each select="region[class!='TableInfo']">

</xsl:for-each>

<xsl:for-each select="region">
<xsl:if test="not(class=&apos;TableInfo&apos;)">

</xsl:if>
</xsl:for-each>

及其几种变体。似乎它以某种方式评估为一个值而不是一个字符串,因为当我将其设置为 != 测试时,所有内容都会被删除,而当我将其设置为 not() 时,不会删除任何内容。有什么帮助吗?

谢谢!

4

2 回答 2

1
<xsl:for-each select="region[not(@class='TableInfo')]">

</xsl:for-each>

您忘记了 @ on class,因此您试图检查类元素而不是属性。显然 != 不能正常工作,所以我换成了 not() 函数。

从风格的角度来看,我还建议研究使用与区域元素匹配的模板,以便您可以使用 apply-templates 而不是 for-each。

于 2013-06-13T20:53:21.970 回答
0

身份规则是您的朋友(当然,您需要指定属性类,而不是“类”元素):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

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

 <xsl:template match="/*"><xsl:apply-templates/></xsl:template>
 <xsl:template match="region[@class='TableInfo']"/>
</xsl:stylesheet>

当对提供的 XML 应用此转换时(将片段包装到单个顶部元素中以使其成为格式良好的 XML 文档):

<region>
text
</region>
于 2013-06-14T04:52:55.103 回答