我试图找出如何忽略Xslt的空返回。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" ><xsl:output indent="no" method="text"/>
<xsl:strip-space elements="*" />
<xsl:template match="/">
Famous Mountains of the World
<xsl:apply-templates />
</xsl:template><xsl:template match="mountain[string-length() !=0]">
Mountain Name:<xsl:value-of select="name[@language='English']"/>
Mountain Name:(<xsl:value-of select="name[@language='PigLatin'] "/>)</xsl:template>
</xsl:stylesheet>
正如你所看到的,它有一个piglatin的选择器,我试图让它在节点没有letlatin选项时不返回空白数据。这是我正在格式化的xml。
<?xml version="1.0" encoding="UTF-8"?>
<!-- Note: This is a comment-->
<?xml-stylesheet type="text/xsl" href="Asg08.xsl"?>
<FamousMountains>
<mountain>
<name language="English">Mount Everest</name>
<name language="PigLatin">ountMa verestEa</name>
<location>Nepal</location>
<height units="feet">29035</height>
</mountain>
<mountain>
<name language="English">Mount Ranier</name>
<location>Washington</location>
<height units="feet">14411</height>
</mountain>
<mountain>
<name language="English">Mount St. Helens</name>
<location>Washington</location>
<height units="feet">8364</height>
</mountain>
<mountain>
<name language="English">Mount Washington</name>
<name language="PigLatin">ountMa ashingtonWa</name>
<location>New Hampshire</location>
<height units="feet">6288</height>
</mountain>
<mountain>
<name language="English">Mount Bonnell</name>
<name language="PigLatin">ountMa onnellBa</name>
<location>Austin</location>
<height units="feet">800</height>
</mountain>
<mountain>
<name language="English">Mount Vesuvius</name>
<name language="PigLatin">ountMa esuviusVa</name>
<location>Italy</location>
<height units="feet">4203</height>
</mountain>
<mountain>
<name language="English">Mount Etna</name>
<name language="PigLatin">ountMa tnaEa</name>
<location>Sicily</location>
<height units="feet">10922</height>
</mountain>
</FamousMountains>
输出看起来像
Mountain Name: Mount Everest
Pig Latin Name: ountMa verestEa
Mountain Name: Mount Ranier
Mountain Name: Mount St. Helens
Mountain Name: Mount Washington
Pig Latin Name: ountMa ashingtonWa
Mountain Name: Mount Bonnell
Pig Latin Name: ountMa onnellBa
Mountain Name: Mount Vesuvius
Pig Latin Name: ountMa esuviusVa
Mountain Name: Mount Etna
Pig Latin Name: ountMa tnaEa
对我所做错的任何帮助或见解都将不胜感激。
答案 0 :(得分:1)
不是在匹配“mountain”的模板中输出名称元素的值,而是为它们设置单独的模板
<xsl:template match="name[@language='English']">
Mountain Name: <xsl:value-of select="." />
</xsl:template>
<xsl:template match="name[@language='PigLatin']">
Mountain Name:(<xsl:value-of select="." />)
</xsl:template>
然后将 xsl:value-of 替换为主模板中的 xsl:apply-templates *
<xsl:apply-templates select="name[@language='English']" />
<xsl:apply-templates select="name[@language='PigLatin']" />
这样,如果没有这样的名字,则不输出任何内容。
试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" ><xsl:output indent="no" method="text"/>
<xsl:strip-space elements="*" />
<xsl:template match="/">
Famous Mountains of the World
<xsl:apply-templates />
</xsl:template>
<xsl:template match="mountain[string-length() !=0]">
<xsl:apply-templates select="name[@language='English']" />
<xsl:apply-templates select="name[@language='PigLatin']" />
</xsl:template>
<xsl:template match="name[@language='English']">
Mountain Name: <xsl:value-of select="." />
</xsl:template>
<xsl:template match="name[@language='PigLatin']">
Mountain Name:(<xsl:value-of select="." />)
</xsl:template>
</xsl:stylesheet>
请注意,如果“XML”中的“Piglatin”之前始终出现“English”,则可以将两个 xsl:apply-templates 替换为单个
<xsl:apply-templates select="name" />