Xml 界定xslt的输出(在非常重要的情况下)
我想知道在xsl转换中分隔xml输出的最佳方法。位置!=last并不总是有效的,因为它对输入进行假设 此玩具示例演示:Xml 界定xslt的输出(在非常重要的情况下),xml,xslt,delimiter,Xml,Xslt,Delimiter,我想知道在xsl转换中分隔xml输出的最佳方法。位置!=last并不总是有效的,因为它对输入进行假设 此玩具示例演示: <xsl:template match="/"> <html> <body> <xsl:for-each select="//cd"> <xsl:if test="title !='Unchain my heart'"> <xsl
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="//cd">
<xsl:if test="title !='Unchain my heart'">
<xsl:value-of select="title" />
<xsl:if test="position() != last()">
<xsl:text>; </xsl:text> <!-- sometimes the delimiter will end if last element is a duplicate; -->
</xsl:if>
</xsl:if>
</xsl:for-each>
</body>
</html>
</xsl:template>
注意后面的分号
有什么想法吗
本例中的xml数据一种方法是对xml进行预扫描,以将其管道化为更好的结构 这里的概念是创建自己的XML,然后将其作为与源XML分离的节点集进行评估。这是通过EXSLT的节点集方法实现的 我刚刚结束了这次训练,希望能有所帮助。正如您所看到的,没有尾随冒号
一种方法是对XML进行预扫描,以将其管道化为更好的结构 这里的概念是创建自己的XML,然后将其作为与源XML分离的节点集进行评估。这是通过EXSLT的节点集方法实现的 我刚刚结束了这次训练,希望能有所帮助。正如您所看到的,没有尾随冒号
您可以做的一件事是使用以下::axis查看您是否在最后一个标题中 例如:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="catalog/cd/title[. != 'Unchain my heart']"/>
</body>
</html>
</xsl:template>
<xsl:template match="title">
<xsl:value-of select="."/>
<xsl:if test="following::cd/title[. != 'Unchain my heart']">
<xsl:text>; </xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<html>
<body>
<xsl:value-of select="catalog/cd/title[. != 'Unchain my heart']" separator="; "/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
//cd[title != 'Unchain my heart']
此外,如果您试图删除Unchain my heart标题,请尝试将其放在谓词中,而不是放在xsl中:如果它没有错,那么执行相同操作的效率会降低,代码也会增加很多
例如:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="catalog/cd/title[. != 'Unchain my heart']"/>
</body>
</html>
</xsl:template>
<xsl:template match="title">
<xsl:value-of select="."/>
<xsl:if test="following::cd/title[. != 'Unchain my heart']">
<xsl:text>; </xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<html>
<body>
<xsl:value-of select="catalog/cd/title[. != 'Unchain my heart']" separator="; "/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
//cd[title != 'Unchain my heart']
或
您可以做的一件事是使用以下::axis查看您是否在最后一个标题中 例如:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="catalog/cd/title[. != 'Unchain my heart']"/>
</body>
</html>
</xsl:template>
<xsl:template match="title">
<xsl:value-of select="."/>
<xsl:if test="following::cd/title[. != 'Unchain my heart']">
<xsl:text>; </xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<html>
<body>
<xsl:value-of select="catalog/cd/title[. != 'Unchain my heart']" separator="; "/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
//cd[title != 'Unchain my heart']
此外,如果您试图删除Unchain my heart标题,请尝试将其放在谓词中,而不是放在xsl中:如果它没有错,那么执行相同操作的效率会降低,代码也会增加很多
例如:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="catalog/cd/title[. != 'Unchain my heart']"/>
</body>
</html>
</xsl:template>
<xsl:template match="title">
<xsl:value-of select="."/>
<xsl:if test="following::cd/title[. != 'Unchain my heart']">
<xsl:text>; </xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<html>
<body>
<xsl:value-of select="catalog/cd/title[. != 'Unchain my heart']" separator="; "/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
//cd[title != 'Unchain my heart']
或
将其更改为:
<xsl:for-each select="//cd[title !='Unchain my heart']">
<xsl:value-of select="title" />
<xsl:if test="position() != last()">
<xsl:text>; </xsl:text>
</xsl:if>
</xsl:for-each>
或者在XSLT2.0中
<xsl:value-of select="//cd/title[. !='Unchain my heart']" separator="; "/>
将其更改为:
<xsl:for-each select="//cd[title !='Unchain my heart']">
<xsl:value-of select="title" />
<xsl:if test="position() != last()">
<xsl:text>; </xsl:text>
</xsl:if>
</xsl:for-each>
或者在XSLT2.0中
<xsl:value-of select="//cd/title[. !='Unchain my heart']" separator="; "/>
谢谢糟糕的是,它增加了如此多的复杂性。操场看起来很有帮助。谢谢。糟糕的是,它增加了如此多的复杂性。游乐场网站看起来很有帮助。我认为正是这种情况使这种方法成了问题。@user833970-我刚刚添加了一条评论,但是,如果您愿意,我可以更新实际的样式表。@user833970-更新了两个示例。我认为正是这种情况使此方法有问题。@user833970-我刚刚添加了一条关于此的注释,但是如果您愿意,我可以更新实际的样式表。@user833970-更新了两个示例。