我从这里收集了这个例子。我是xsl的新手,并试图了解它是如何工作的。这里的xsl是为了让他们的派对整理出来的总统。这里我提供了两个我写的xsl文件。一个工作(我平均显示输出)和另一个没有工作(这意味着没有输出到屏幕/我称之为坏)。但是这两个文件都没有给出任何错误。任何人都可以向我解释为什么破碎xsl文件没有显示任何输出?
xml文件:
<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type='text/xsl' href='party.xslt'?>
<presidents >
<president>
<number>1</number>
<name>George Washington</name>
<birthday>1732-02-22</birthday>
<took_office>1789-04-30</took_office>
<left_office>1797-03-04</left_office>
<party>no party</party>
<term>
<term_number>1</term_number>
<vice_president>John Adams</vice_president>
</term>
<term>
<term_number>2</term_number>
<vice_president>John Adams</vice_president>
</term>
</president>
<president>
<number>2</number>
<name>Mr.X</name>
<birthday>1735-10-30</birthday>
<took_office>1797-03-04</took_office>
<left_office>1801-03-04</left_office>
<party>Federalist</party>
<term>
<term_number>3</term_number>
<vice_president>Thomas Jefferson</vice_president>
</term>
</president>
<president>
<number>2</number>
<name>John Adams</name>
<birthday>1735-10-30</birthday>
<took_office>1797-03-04</took_office>
<left_office>1801-03-04</left_office>
<party>Democratic</party>
<term>
<term_number>3</term_number>
<vice_president>Thomas Jefferson</vice_president>
</term>
</president>
</presidents>
没有显示输出的xsl:
<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:template match='/'>
<html>
<body>
<h1>sorting presidents</h1>
<xsl:apply-templates select='presidents/president'>
<xsl:sort select='party' data-type='text'/>
</xsl:apply-templates>
</body>
</html>
</xsl:template>
<xsl:template match='presidents/president'>
<xsl:apply-templates select='name'/>
</xsl:template>
<xsl:template match='name'>
<span style='color:red;font-size:40px;'><xsl:value-of select='name'/></span><br/>
</xsl:template>
</xsl:stylesheet>
确实显示输出的xsl:
<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:template match='/'>
<html>
<body>
<h1>sorting presidents</h1>
<xsl:apply-templates select='presidents/president'>
<xsl:sort select='party' data-type='text'/>
</xsl:apply-templates>
</body>
</html>
</xsl:template>
<xsl:template match='presidents/president'>
<span style='color:red;font-size:40px;'><xsl:value-of select='name'/></span><br/>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
这里没有任何邪恶。
在错误的XSLT中查看匹配 name 的模板:
<xsl:template match='name'>
<span style='color:red;font-size:40px;'><xsl:value-of select='name'/></span>
<br/>
通过使用<xsl:value-of select='name'/>
,您假设您有另外<name>
作为当前匹配的<name>
的子级。 <xsl:value-of select='.'/>
将产生预期的输出。
与优秀的XSLT相比:
<xsl:template match='presidents/president'>
<span style='color:red;font-size:40px;'><xsl:value-of select='name'/></span>
<br/>
</xsl:template>
您正在匹配<president>
,而<xsl:value-of select='name'/>
指令将成功检索<name>
元素作为<president>
的子元素,这是XML的正确结构。