忽略节点选择中的空数据

时间:2014-03-23 19:47:59

标签: xml xslt xslt-1.0

我试图找出如何忽略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  

对我所做错的任何帮助或见解都将不胜感激。

1 个答案:

答案 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" />
相关问题