这是xml文件。 “CategoryName”元素中的空格和回车符。
<?xml version="1.0" encoding="utf-8"?>
<group>
<item>
<id>item 1</id>
<CategoryName>
</CategoryName>
</item>
<item>
<id>item 2</id>
<CategoryName></CategoryName>
</item>
<item>
<id>item 3</id>
<CategoryName> </CategoryName>
</item>
</group>
以下是上述XML文件的XSLT文件。它应该做的是它将清除“CategoryName”元素中的所有空格。然后,它将测试“CategoryName”是否为空。
<?xml version="1.0" encoding="utf-8"?>
<!-- DWXMLSource="testempty.xml" -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:strip-space elements="*" /> <!--HERE IS STRIP SPACE-->
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Untitled Document</title>
</head>
<body>
<xsl:for-each select="/group/item">
<xsl:if test="CategoryName = ''"> <!--HERE IS THE TEST-->
<p>Empty</p> <!--IT WILL OUTPUT 'EMPTY' IF THE ELEMENT IS EMPTY-->
</xsl:if>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
问题是,xsl:strip-space
没有做好自己的工作。只有第2项的“CategoryName”通过“空”测试。
有什么问题?
答案 0 :(得分:2)
我不知道Dreamweaver正在使用什么XSLT引擎,但这看起来不对。
我认为可能有一些XSLT处理器只应用xsl:strip-space,如果你使用未解析的输入(词法XML),而不是如果你用DOM提供它们。规范中没有任何内容可以证明这种行为的合理性,但它使实现者的生活变得更加容易。
值得指出的是,这不是xsl:strip-space的使用方式。它旨在用于去除“可忽略的”空白,即用于在仅元素内容中缩进的空白。如果您正在使用XSLT 2.0架构感知转换,则这将成为规则:xsl:strip-space不会影响具有简单内容的元素的内容。这是因为剥离此类元素的空格可能会使元素对模式无效。
答案 1 :(得分:1)
显然,DeamWeaver的XSLT处理器有一个错误。
以下是获得所需结果的另一种方法:
<强>替换强>:
<xsl:if test="CategoryName = ''">
<强>与强>:
<xsl:if test="not(normalize-space(CategoryName))">