xslt – XPath表达式,以选择除特定列表之外的所有XML子节点?
发布时间:2020-12-16 08:01:03 所属栏目:百科 来源:网络整理
导读:以下是示例数据: catalog cd titleEmpire Burlesque/title artistBob Dylan/artist countryUSA/country customField1Whatever/customField1 customField2Whatever/customField2 customField3Whatever/customField3 companyColumbia/company price10.90/pric
以下是示例数据:
<catalog> <cd> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <country>USA</country> <customField1>Whatever</customField1> <customField2>Whatever</customField2> <customField3>Whatever</customField3> <company>Columbia</company> <price>10.90</price> <year>1985</year> </cd> <cd> <title>Hide your heart</title> <artist>Bonnie Tyler</artist> <country>UK</country> <customField1>Whatever</customField1> <customField2>Whatever</customField2> <company>CBS Records</company> <price>9.90</price> <year>1988</year> </cd> <cd> <title>Greatest Hits</title> <artist>Dolly Parton</artist> <country>USA</country> <customField1>Whatever</customField1> <company>RCA</company> <price>9.90</price> <year>1982</year> </cd> </catalog> 说我想选择除价格和年份元素之外的所有内容。我会期待写下像下面这样的东西,这显然不行。 <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <xsl:for-each select="//cd/* except (//cd/price|//cd/year)"> Current node: <xsl:value-of select="current()"/> <br /> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet> 请帮我找到一种排除某些子元素的方法。 <xsl:for-each select="//cd/*[not(self::price or self::year)]"> 但实际上这是坏的,不必要的复杂。更好: <xsl:template match="catalog"> <html> <body> <xsl:apply-templates select="cd/*" /> </body> </html> </xsl:template> <!-- this is an empty template to mute any unwanted elements --> <xsl:template match="cd/price | cd/year" /> <!-- this is to output wanted elements --> <xsl:template match="cd/*"> <xsl:text>Current node: </xsl:text> <xsl:value-of select="."/> <br /> </xsl:template> 避免< xsl:for-each>。几乎所有的时间都是错误的工具,应该由< xsl:apply-templates>替代和< xsl:template> ;. 以上工作原因是匹配表达特异性。 match =“cd / price | cd / year”比match =“cd / *”更具体,因此它是cd / price或cd / year元素的首选模板。不要尝试排除节点,让他们丢弃它们来处理它们。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |